标签:读书笔记 编程实践 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