通过循环定义javascript原型函数
Defining javascript prototype functions through a loop
我尝试从数组中定义原型函数。就像下面的例子:我的黑兔子应该说‘toto’,但它没有说出来!为什么?
function Rabbit ( type ) {
this.type = type ;
}
var funcs = ["says", "doesnt_say"];
for(var i=0;i<funcs.length;i++)
{
var f = funcs[i];
Rabbit.prototype[f] = function ( line ) {
alert(" The " + this.type + " rabbit "
+ f + " '" + line + " '") ;
};
}
var blackRabbit = new Rabbit ("black") ;
blackRabbit.says("toto");
可见于http://jsfiddle.net/xou11bgu/
问题是变量"f"是由您创建的所有函数共享的,并且它最终将具有最后一个函数名的值。
可以使用函数来构造以下函数:
Rabbit.prototype[f] = function(f) {
return function ( line ) {
alert(" The " + this.type + " rabbit "
+ f + " '" + line + " '") ;
};
}(f);
这是一个非常常见的JavaScript绊脚石的实例;在Stackoverflow上还有很多很多类似的问题,但是很难找到,因为除非你知道问题是什么,否则很难知道你在寻找什么。
您在方法中使用变量f
,但是该变量由所有方法共享,并且将包含最后一个方法的名称。
你可以使用一个函数来创建一个作用域,每个方法将获得自己的变量f
:
for(var i=0;i<funcs.length;i++) {
(function(f){
Rabbit.prototype[f] = function ( line ) {
alert("The " + this.type + " rabbit " + f + " '" + line + "'") ;
};
})(funcs[i]);
}
演示:http://jsfiddle.net/xou11bgu/4/
相关文章:
- 使用方括号访问插件原型函数
- 使用setInterval调用原型函数时出现问题
- 无法从angularjs调用JavaScript原型函数
- AngularJS ng repeat显示原型函数未定义
- 在 Redux 状态下存储具有原型函数的对象
- Javascript 中的构造函数不会返回由原型函数传递的正确值
- JavaScript:在哪里放置原型函数
- 创建所有原型函数均可访问的局部变量
- 可以'这'在原型函数中未定义
- 使用特权Getter/Setter函数的JavaScript原型函数
- Javascript、node、Q promise、原型函数和“;这个“;
- 在Javascript中将对象原型函数绑定到对象
- 从node.js模块中向JSON添加原型函数
- 从另一个(包括其自身)触发一个原型函数
- Javascript原型继承原型函数调用
- JavaScript–从另一个原型函数调用原型的一个函数
- 访问原型函数中的私有成员
- 如何在AngularJS中将依赖关系传递给原型函数
- 这两种用 JavaScript 编写原型函数的方式有什么区别?
- 为什么不能使用lambda来定义原型函数