标签:读书笔记 编程实践 javascript prototype
本系列作为EffectiveJavaScript的读书笔记。
不使用prototype进行JavaScript的编码是完全可行的,例如:
function User(name, passwordHash) { this.name = name; this.passwordHash = passwordHash; this.toString = function() { return "[User " + this.name + "]"; }; this.checkPassword = function(password) { return hash(password) === this.passwordHash; }; } var u1 = new User(/* ... */); var u2 = new User(/* ... */); var u3 = new User(/* ... */);
但是,当toString和checkPassword被定义在prototype上时,上图就变成下面这个样子了:
toString和checkPassword方法现在定义在了User.prototype对象上,也就意味着这两个方法只存在一份拷贝,并被所有的User实例共享。
也许你会认为将方法作为拷贝放在每个实例上,会节省方法查询的时间。(当方法定义在prototype上时,首先会在实例本身上寻找方法,如果没有找到才会去prototype上继续找)
但是在现代的JavaScript执行引擎中,对方法的查询进行了大量优化,所以这个查询时间几乎是不需要考虑的,那么将方法放在prototype对象上就节省了很多内存。
总结:
Effective JavaScript Item 34 在prototype上保存方法
标签:读书笔记 编程实践 javascript prototype
原文地址:http://blog.csdn.net/dm_vincent/article/details/39895865