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

does javascript functions are shared across all objects?

本文关键字:对象 之间 共享 函数 是否 javascript      更新时间:2023-09-26

所以这是一些代码

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

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

是的,使用该代码,ob1ob2都引用了相同的函数m。如果调用ob1.m(),它将调用mthis指的是ob1。如果您调用obj2.m(),它将调用mthis指的是ob2。函数只有一个副本,并且对该函数有多个引用。在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();

同样,它们共享函数,因为当它们通过new MyObject创建时,它们都接收MyObject.prototype作为其底层原型,并且原型具有对函数的引用。

类似地(在启用ES5的环境中):

var MyProto = {
    m: function() {
    }
};
var ob1 = Object.create(MyProto);
var ob2 = Object.create(MyProto);

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

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

在您的示例中,您只需在ob2中存储一个指向函数m的链接。

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

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

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

ob2 = ob1;

不像ob2.m = ob1.m;

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