所以这是一些代码
ob1 = {
m: function(){
alert(this);
}
}
ob2.m = ob1.m;
那是因为我认为在这种情况下函数只存储在内存中
所以这是一些代码
ob1 = {
m: function(){
alert(this);
}
}
ob2.m = ob1.m;
那是因为我认为在这种情况下函数只存储在内存中
是的,使用该代码,两者ob1
都ob2
引用了相同的函数m
。如果你调用,ob1.m()
它会调用引用。如果你调用,它会调用引用。该函数只有一个副本,并且您对该函数有多个引用。在 JavaScript 中,函数是真实的对象,就像任何其他对象一样。(许多其他编程语言并非如此。)m
this
ob1
obj2.m()
m
this
ob2
你也可以这样做:
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
功能。
是的。函数是第一类对象。您只会真正与对它们的引用进行交互。
在您的示例中,您只需将链接存储到 ob2 中的函数 m。
要使函数全局化,您需要设置对象原型。我不推荐它,但这应该有效:
Object.prototype.test=1;
{test} --> 1