cdm*_*kay 13 javascript performance inheritance prototypal-inheritance
在Douglas Crockford的JavaScript:The Good Parts中,他建议我们使用函数式继承.这是一个例子:
var mammal = function(spec, my) {
var that = {};
my = my || {};
// Protected
my.clearThroat = function() {
return "Ahem";
};
that.getName = function() {
return spec.name;
};
that.says = function() {
return my.clearThroat() + ' ' + spec.saying || '';
};
return that;
};
var cat = function(spec, my) {
var that = {};
my = my || {};
spec.saying = spec.saying || 'meow';
that = mammal(spec, my);
that.purr = function() {
return my.clearThroat() + " purr";
};
that.getName = function() {
return that.says() + ' ' + spec.name + ' ' + that.says();
};
return that;
};
var kitty = cat({name: "Fluffy"});
Run Code Online (Sandbox Code Playgroud)
我对此的主要问题是,每次我创建一个mammal
或cat
JavaScript解释器必须重新编译其中的所有函数.也就是说,您无法在实例之间共享代码.
我的问题是:如何提高此代码的效率?例如,如果我制作了数千个cat
对象,那么修改此模式以利用该prototype
对象的最佳方法是什么?
好吧,如果你打算制作很多mammal
或者那么,你就是不能这样做cat
.相反,它采用旧式的方式(原型)并通过属性继承.你仍然可以做的建设者你有上述而是的方式that
和my
你使用隐式this
和代表的基类(在这个例子中,一些变量this.mammal
).
cat.prototype.purr = function() { return this.mammal.clearThroat() + "purr"; }
Run Code Online (Sandbox Code Playgroud)
我将使用另一个名称而不是my
基本访问,并将其存储this
在cat
构造函数中.在我使用的这个例子mammal
中,如果你想拥有对全局对象的静态访问权限,这可能不是最好的mammal
.另一种选择是命名变量base
.
归档时间: |
|
查看次数: |
5271 次 |
最近记录: |