javascript函数是否在所有对象之间共享?

时间:2013-02-18 14:00:52

标签: javascript function

所以这是一些代码

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

ob2.m = ob1.m;

这是因为我认为在这种情况下函数会在内存中存储一​​次

4 个答案:

答案 0 :(得分:1)

是的,使用该代码,ob1ob2都引用了相同的函数m。如果您致电ob1.m(),则会m致电thisob1。如果您致电obj2.m(),则会m致电thisob2。该函数只有一个副本,并且您有多个引用到该函数。在JavaScript中,函数是真实对象,就像任何其他对象一样。 (许多其他编程语言都不是这样。)

你也可以这样做:

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函数。

答案 1 :(得分:0)

是。函数是第一类对象。你只是真正地与他们的引用互动。

答案 2 :(得分:0)

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

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

Object.prototype.test=1;
{test} --> 1

答案 3 :(得分:-1)

是的,但您可以分配如下对象

ob2 = ob1;

不喜欢 ob2.m = ob1.m;

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