Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数是否在所有对象之间共享?_Javascript_Function - Fatal编程技术网

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

javascript函数是否在所有对象之间共享?,javascript,function,Javascript,Function,这是一些代码 ob1 = { m: function(){ alert(this); } } ob2.m = ob1.m; 这是因为我认为函数只在内存中存储一次,在这种情况下是的。函数是第一类对象。您只会真正与它们的引用进行交互。是的,使用该代码,ob1和ob2都引用了相同的函数m。如果调用ob1.m(),它将调用m,使用this引用ob1。如果调用obj2.m(),它将使用this调用ob2。该函数只有一个副本,并且您有多个对该函数的引用。在JavaScript中,函数是真实

这是一些代码

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

ob2.m = ob1.m;

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

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

是的,使用该代码,
ob1
ob2
都引用了相同的函数
m
。如果调用
ob1.m()
,它将调用
m
,使用
this
引用
ob1
。如果调用
obj2.m()
,它将使用
this
调用
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();
同样,它们共享该函数,因为当它们通过
新建MyObject
创建时,它们都将
MyObject.prototype
作为其基础原型,并且原型具有对该函数的引用

类似地(在支持ES5的环境中):


该对象最终再次共享一个原型,并且该原型具有
m
函数。

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

要使函数全局化,需要设置对象原型。我不建议这样做,但这应该是可行的:

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

是,但您可以按如下方式指定对象

ob2 = ob1;
不喜欢
ob2.m=ob1.m


看这把小提琴:

你的问题是什么?什么是ob2?我只是想知道我的想法是否正确?无需进一步解释B2是引用ob1 m方法的第二个对象,因此函数只存储在内存中一次?@AbdulRaziq:正确,就像任何其他对象一样。感谢T.J,它现在清楚了
对象。prototype
与问题无关(或者确实与使函数“全局化”)。
ob2 = ob1;