3

在javascript中,我知道如果我有一个函数:

var myFunction = function() {
    return 'Hello World';
};

然后我可以扩展myFunction对象并向其添加属性,如下所示:

myFunction.myProperty = 'Goodbye World';

然后我既可以调用函数又可以访问属性:

// Returns 'Hello World'
myFunction();

// Returns 'Goodbye World'
myFunction.myProperty;

我想知道是否有办法在已经存在的对象上创建函数;基本上是上述但相反:

myFunction = {
    myProperty: 'Goodbye World'
};

myFunction ...{sprinkle some magic here}... = function() {
    return 'Hello World';
};

// Returns 'Hello World'
myFunction();

// Returns 'Goodbye World'
myFunction.myProperty;

当然,仅仅将函数分配给myFunction对象会覆盖已经分配给变量的现有对象。有没有办法做到这一点,我忽略了?

4

1 回答 1

0

不,您不能将普通对象用作函数对象,因为函数对象具有不同的功能。这两个对象不一样。

如果您真的想以这种向后的方式定义事物,您可以创建一个函数对象,复制常规对象的所有属性,然后将生成的函数对象分配回原始名称。

// regular object defined first
var myFunction = {
    myProperty: 'Goodbye World'
};

// create function object
var tempFunction = function() {console.log("hi");}
// copy props from regular object to function object
for (var prop in myFunction) {
    if (myFunction.hasOwnProperty(prop)) {
        tempFunction[prop] = myFunction[prop];
    }
}

// assign new function object with copied props back to the original name
myFunction = tempFunction;

// now it's a function object that you can call
myFunction();

// or you can access its properties
var data = myFunction.myProperty;
于 2013-11-13T01:27:21.050 回答