面向对象的javascript原型

时间:2013-01-16 15:59:02

标签: javascript

我试图更清楚地理解这一点。当我扩展修改Array原型中的每个函数时,调用func(this [i])如何调用传递给Array.each的函数。

由于函数定义是函数(func),func是参数。

func = function(i) { alert(i) },因此func(this[i]) = { function(this[i]) { alert(this[i]) }

Array.prototype.each = function(func) {
  for (var i=0; i<this.length; i++) {
    func(this[i]);
  }
};

[1,2,3].each(function(i) {
  alert(i);
});

4 个答案:

答案 0 :(得分:1)

是的,function(func)基本上是一个带参数'func'

的匿名函数

答案 1 :(得分:1)

请注意,JS中的每个函数都只是一个对象。因此传递给func函数的each参数是一个函数对象。

所以调用func(aParam)得到func参数(实际上是一个函数)并调用它传递相应的参数。

答案 2 :(得分:0)

在你的例子中:func = function(i){alert(i); }

答案 3 :(得分:0)

在内部对象中,this将假定实例原型的上下文(在JS中,每个类型基本上都是某个原型的对象实例,因此每个类型都有自己的原型来创建新对象)。因此,在这种情况下,this将引用从Array原型创建的对象(即[1,2,3])。

将匿名函数传递给方法,允许该方法将i位置的元素传递给传递给它的函数(回调)。

我解释说:

iter #1: this => [1,2,3] ; i => 0 ; func => (function(i){ alert(i); })(this[i]) => 1
iter #2: this => [1,2,3] ; i => 1 ; func => (function(i){ alert(i); })(this[i]) => 2
iter #3: this => [1,2,3] ; i => 2 ; func => (function(i){ alert(i); })(this[i]) => 3

您可以将this[i]视为[1,2,3][i]