0

所以这是一些代码

ob1 = {
 m: function(){
   alert(this);
   }
}

ob2.m = ob1.m;

那是因为我认为在这种情况下函数只存储在内存中

4

4 回答 4

1

是的,使用该代码,两者ob1ob2引用了相同的函数m。如果你调用,ob1.m()它会调用引用。如果你调用,它会调用引用。该函数只有一个副本,并且您对该函数有多个引用。在 JavaScript 中,函数是真实的对象,就像任何其他对象一样。(许多其他编程语言并非如此。)mthisob1obj2.m()mthisob2

你也可以这样做:

function m() {
}

var ob1 = {m: m};
var ob2 = {m: m};

他们再次共享功能。

或这个:

function MyObject() {
}
MyObject.prototype.m = function() {
};

var ob1 = new MyObject();
var ob2 = new MyObject();

它们再次共享该函数,因为它们MyObject.prototype在通过创建它们时都接收为它们的底层原型new MyObject,并且原型具有对该函数的引用。

同样(在启用 ES5 的环境中):

var MyProto = {
    m: function() {
    }
};

var ob1 = Object.create(MyProto);
var ob2 = Object.create(MyProto);

该对象再次共享一个原型,并且该原型具有该m功能。

于 2013-02-18T14:04:14.100 回答
0

是的。函数是第一类对象。您只会真正与对它们的引用进行交互。

于 2013-02-18T14:02:01.200 回答
0

在您的示例中,您只需将链接存储到 ob2 中的函数 m。

要使函数全局化,您需要设置对象原型。我不推荐它,但这应该有效:

Object.prototype.test=1;
{test} --> 1
于 2013-02-18T14:07:16.113 回答
-1

是的,但您可以像下面这样分配对象

ob2 = ob1;

不喜欢 ob2.m = ob1.m;

看到这个小提琴:http: //jsfiddle.net/RYh7U/87/

于 2013-02-18T14:08:34.743 回答