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;