通过函数添加到对象

时间:2012-07-13 07:59:47

标签: javascript object

我目前正在尝试通过函数添加对象。

我的代码是:

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

2 个答案:

答案 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功能。