基
toplevelOBJ
对象在整个应用程序中用作this.toplevelOBJ
,我可以访问它的属性,例如this.toplevelOBJ.mapArea.coordX
。ClassB
中有一个名为blink
的函数,它等待来自外部来源的信号。ClassC
我需要捕获此信号,因此我在capture
中设置了一个ClassC
函数来检索ClassB
发送的信号问题
通过capture()
功能发送到ClassC
时,
"this"
中的this.toplevelOBJ
不再引用toplevelOBJ
,而是引用ClassC
。
因此,我通过this.toplevelOBJ
函数将toplevel
作为参数capture()
发送,但在接收时,我不确定toplevelOBJ
中是否有来自toplevel.update()
的函数叫:toplevel.mapArea.coordX
,而我可以访问其属性:Object
问题
通过Object
作为参数发送时,Object
是否完全相同?因为当我查看update()
时,我在toplevel.__proto__.__proto__
下找到了toplevel.mapArea
函数,而我立即找到了它的属性:// Class in which I am sending the object
var ClassB = exports.ClassB = ClassA.extend({
blink: function(key, value) {
ClassC.prototype.capture(key, value, this.toplevelOBJ);
}
});
代码
// Class in which I am receiving the object
var ClassC = exports.ClassC = ClassA.extend({
capture: function(key, value, toplevel) {
/* Run Function of toplevel */
}
});
{{1}}
答案 0 :(得分:0)
在类中最常用的方法是在实例化时存储正确的this
。最常见的方法是:
function SomeClass
{
var that = this;
that.myVariable = 5;
that.someFunction = function()
{
return that.myVariable;
}
}
您还有包装器/代理方法,例如由下划线库中的bind
函数解释,可以“强制”this
变量。见http://underscorejs.org/#bind
我更喜欢这两种方法,而不是调用者强制 this
变量。
答案 1 :(得分:0)
是的,当您将对象作为参数传递时,它完全相同。
它甚至不是对象的精确副本,它实际上是相同的对象。该参数只是对象的引用,因此永远不会复制该对象。
属性和方法可以是对象本身的成员,也可以是原型链中的成员。在您的情况下,mapArea
属性是对象本身的成员,update
方法是原型的成员或作为toplevelOBJ
对象原型的对象。