在定义对象后在对象上定义函数

Define function on object after object has been defined

本文关键字:对象 定义 函数      更新时间:2023-09-26

在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对象将覆盖已分配给变量的现有对象。 有没有我忽略的方法

No. 你不能把一个普通的对象当作函数对象来使用它,因为函数对象是具有一些不同功能的不同的东西。 这两个对象并不相同。

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

// 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;