javascript函数是否在所有对象之间共享
does javascript functions are shared across all objects?
所以这是一些代码
ob1 = {
m: function(){
alert(this);
}
}
ob2.m = ob1.m;
这是因为我认为函数在内存中存储一次,在这种情况下
是的,使用该代码,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();
同样,它们共享函数,因为当它们通过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/
相关文章:
- JavaScript中的函数和对象之间没有区别吗?
- 在控制器和数据对象之间同步数据
- 不同对象之间的递归,并将它们唯一地组合在一起,不重复
- 两个对象之间的Javascript原型
- 在window.onload之前/之后创建对象之间的区别
- 如何管理原始对象之间的数据依赖关系
- javascript中构造函数和对象之间的等价性
- 为什么 JSON 中的对象之间有逗号
- 对字符串对象调用 .localeCompare 与构造特制的 Intl.Collator 对象之间的性能差异
- 如何匹配两个对象之间的值并使用特定值创建新对象
- D3 - 在两个不与其他对象相交的对象之间绘制一条线
- 两个时间对象之间的差异
- 函数和对象之间的差异,以及它如何影响性能
- jQuery函数,用于计算两个JavaScript对象之间的差异
- jQuery 自定义事件在全局范围内工作,但在对象之间不起作用
- 以天为单位的 2 个 ember 日期时间对象之间的差异
- 使用原型和对象文字表示法创建对象之间的区别
- HTML/JS Canvas 在对象之间画线
- 在 jQuery 对象和纯 js 对象之间进行转换
- 循环遍历 JSON,在对象之间插入键/值