我目前正在尝试通过函数添加对象。
我的代码是:
var ob = {};
function add(f, fun) {
ob[f] = fun();
}
add('hi', function() {
alert('hello')
})
ob.hi()
因此,假设将ob更改为:
var ob = {
hi: function(){
alert('hello')
}
}
它确实警告hello
,但只是触发添加功能(我想停止),而不是来自ob.hi()
功能。
感谢您的帮助。如果您还想要,还可以查看fiddle
答案 0 :(得分:2)
您正在执行该功能并将其返回值分配给该属性。您需要将属性的引用分配给属性。更改add
功能:
function add(f, fun) {
ob[f] = fun; //No invoking parentheses!
}
这是一个updated fiddle。
如果你在原始小提琴中查看控制台,你会得到一个错误的提示:
未捕获的TypeError:对象
#<Object>
的属性“hi”不是 功能
答案 1 :(得分:1)
将您的函数添加为对象的属性:
ob['hi'] = function() {
alert('hello')
};
或
ob[funname] = fun;
如果该功能在别处定义。
不要仅仅为了设置属性而编写add
函数。通过自定义setter替换该语言的标准功能不会使代码更具可读性。
不要忘记你可以在javascript中定义类:
function Rect(x,y,w,h){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
Rect.prototype.contains = function(x, y) {
return x>=this.x && x<=this.x+this.w && y>=this.y && y<=this.y+this.h;
};
创建为new Rect(0, 1, 2, 3)
的所有对象都具有contains
功能。