星空网 > 软件开发 > Java

[Effective JavaScript 笔记]第34条:在原型中存储方法

js中完全有可能不借助原型进行编程。不用在其原型中定义任何的方法。

创建对象

构造函数

所有属性和方法都在构造函数中定义

function User(name,pwd){ this.name=name; this.pwd=pwd; this.toString=function(){   return '[User '+this.name+']'; }; this.checkPwd=function(pwd){  return hash(pwd)===this.pwd; }}

这样创建没有什么问题,但这里当我们构造多个User实例的时候,会占用过多的内存空间。

var u1=new User(/* 一些参数 */);var u2=new User(/* 一些参数 */);var u3=new User(/* 一些参数 */);

可以从下面的图里看出它们在内存中的情况。
[Effective JavaScript 笔记]第34条:在原型中存储方法

原型和构造函数相结合

function User(name,pwd){ this.name=name; this.pwd=pwd; this.toString=function(){   return '[User '+this.name+']'; }; this.checkPwd=function(pwd){  return hash(pwd)===this.pwd; }}User.prototype.toString=function(){  return '[User '+this.name+']';};User.prototype.checkPwd=function(pwd){ return hash(pwd)===this.pwd;}

当产生多个实例时

var u1=new User(/* 一些参数 */);var u2=new User(/* 一些参数 */);var u3=new User(/* 一些参数 */);

其内存结构图
[Effective JavaScript 笔记]第34条:在原型中存储方法

对比

可以看出,将方法存储在原型中,使其可以被所有的实例使用,而不需要给每个实例对象增加额外的属性。
将方法存储在实例对象中会优化查找速度,当使用如u1.toString()方法,不需要搜索原型链来查找toString的实现。但,现代的js引擎深度优化了原型查找,所以将方法复制到实例对象并不一定保证速度有明显的提升。而且实例方法比起原型方法肯定会占用更多的内存。

提示

  • 将方法存储在实例对象中将创建该函数的多个副本,因为每个实例对象都有一份副本

  • 将方法存储于原型中优于存储在实例对象中




原标题:[Effective JavaScript 笔记]第34条:在原型中存储方法

关键词:JavaScript

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊旺季来临,这波操作决定了你年底吃肉还是喝汤:https://www.ikjzd.com/articles/108427
糟糕!亚马逊搜索算法被改,这些卖家危险了!:https://www.ikjzd.com/articles/108428
必看!详解Facebook引流方法!:https://www.ikjzd.com/articles/108429
如何成为Shopee优选卖家,优选卖家的优势:https://www.ikjzd.com/articles/10843
阿里国际站商品任务板块上线,助力商家智能运营!:https://www.ikjzd.com/articles/108430
旺季侵权频发,亚马逊运营七大要点避开雷区!:https://www.ikjzd.com/articles/108431
37号文今后是否会更新?一文详解关键信息 :https://www.kjdsnews.com/a/1836441.html
探讨内地人开设香港账户的可行性 :https://www.kjdsnews.com/a/1836442.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流