所以这是一些代码
ob1 = {
m: function(){
alert(this);
}
}
ob2.m = ob1.m;
这是因为我认为在这种情况下函数会在内存中存储一次
答案 0 :(得分:1)
是的,使用该代码,ob1
和ob2
都引用了相同的函数m
。如果您致电ob1.m()
,则会m
致电this
并ob1
。如果您致电obj2.m()
,则会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.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)