如果我要定义两个对象myDataStore和myDrawer,就像这样:
var myDataStore = function(myObjectRef) {
this.myInternalObject = myObjectRef;
};
var myDrawer = function(myObjRef) {
this.myInternalObject = myObjectRef;
};
如果我要创建一个这样的对象:
[[编辑 - 调整对象创建以确保'this'映射到myObject,而不是全局窗口对象]]
(function(){
var myObject = window.myObject = function(){
this.dataStore = new myDataStore(this);
this.drawer = new myDrawer(this);
}
})();
然后myObject.dataStore.myInternalObject和myObject.drawer.myInternalObject只是指向原始'myObject'的指针 - 不占用浏览器中的任何额外内存。是
我对实现这样的技术感兴趣 - 因为它使对象很容易相互通信。
答案 0 :(得分:2)
不。 this
指的是.
左侧的任何内容,或者如果.
没有左侧,那么它就是全局对象。
所以如果你这样做了:
var MyObj = {
"create": function() {
var myObject = {
dataStore = new myDataStore(this);
drawer = new myDrawer(this);
};
}
};
MyObj.create();
this
将是MyObj
。如果你这样做了:
var myObject = {
dataStore = new myDataStore(this);
drawer = new myDrawer(this);
};
(不在函数中)this
将是window
(假设这是在浏览器中)。
答案 1 :(得分:1)
没有。 myObject.dataStore.myInternalObject
和myObject.drawer.myInternalObject
都将指向全局对象(映射到浏览器中的window
),除非您在声明myObject
时已经在函数内部。换句话说,它将被设置为您声明this
的上下文中的myObject
。它不会是myObject
本身。
答案 2 :(得分:1)
是的,你的假设是正确的。 myInternalObject
将是一个引用,而不是一个新对象。你可以这样测试:
var MyDataStore = function(myObjectRef) {
this.myInternalObject = myObjectRef;
};
var data = {
value: "value"
};
var dataStore = new MyDataStore(data);
data.value = "test";
console.log(dataStore.myInternalObject); // logs { value : "test" } instead of { value: "value" }