在Google 开发人员关于 JavaScript 代码优化的文章中,他们在“定义类方法”一节中建议使用原型将方法作为属性添加到函数(在 JavaScript 中被视为对象)。
例如,不要以这种方式在函数构造函数体内定义方法:
baz.Bar = function() {
// constructor body
this.foo = function() {
// method body
};
}
方法应该以这种方式使用原型定义:
baz.Bar = function() {
// constructor body
};
baz.Bar.prototype.foo = function() {
// method body
};
但是,我看到了添加类方法和创建可重用 JavaScript 代码的不同方法,这些代码在 d3.js 等框架中用于实现基于 JS 闭包的核心方法,例如:
var nameSpace = {};
nameSpace.myModule = function(module){
var myVar = '';
function exports(){
}
//getter and setter for myVar
exports.myVar = function(_x){
if(!arguments) return myVar;
myVar = _x;
return this; // to allow for method chaining
}
exports.method1 = function(){
//do something
}
exports.method2 = function(){
//do something
}
return exports;
}
and then to use the module:
var test = nameSpace.myModule();
test.method1();
最后一种方法是否可以解决 JavaScript 代码的性能和重用问题,否则为什么它会广泛用于框架实现?
感谢和问候穆罕默德·阿里