【发布时间】:2014-01-23 18:05:00
【问题描述】:
我正在阅读 John Resig 和 Bear Bibeault 撰写的一本很棒的 JavaScript 书籍,JavaScript Ninja 的秘密。我到了他们展示“扩展” Array 类的可能方法的部分。 (因为他们并没有真正扩展它)这是示例中的代码:
function MyArray() {}
MyArray.prototype.length = 0;
(function() {
var methods = ['push', 'pop', 'shift', 'unshift', 'slice', 'splice', 'join'];
for (var i = 0; i < methods.length; i++) (function(name) {
MyArray.prototype[ name ] = function() {
return Array.prototype[ name ].apply(this, arguments);
};
})(methods[i]); //<-This one
})();
var mine = new MyArray();
mine.push(1, 2, 3);
我离 javascript 专家还很远,有时会发现闭包有问题,所以我的问题是:内部立即函数有什么需要?如果我这样写:
for (var i = 0; i < methods.length; i++) {
MyArray.prototype[methods[i]] = function() {
return Array.prototype[methods[i]].apply(this, arguments);
};
};
控制台会记录:ReferenceError: reference to undefined property methods[i]。这是否意味着 MyArray.prototype 实际上没有分配方法,直到我调用它的一些方法?或者这里的诀窍是什么?非常感谢!
【问题讨论】:
标签: javascript methods closures prototype