[英]Pass object as a function parameter
基础
toplevelOBJ
对象在整个应用程序中都用作this.toplevelOBJ
,我可以在其中访问其属性,例如this.toplevelOBJ.mapArea.coordX
。 ClassB
有一个称为blink
的功能,它等待来自外部源的信号。 ClassC
我需要捕获此信号,因此我设置了一个函数,在ClassC
capture
,以检索由ClassB
发送的信号 问题
当通过发送capture()
函数来ClassC
, "this"
在this.toplevelOBJ
不再指toplevelOBJ
,但ClassC
。
因此,我通过capture()
函数将this.toplevelOBJ
发送为参数toplevel
,但是在接收时,我不确定是否正在调用来自toplevelOBJ
的函数: toplevel.update()
,但是我可以访问其属性: toplevel.mapArea.coordX
题
通过Object
作为参数发送时, Object
完全相同? 因为当我检查Object
,我在toplevel.__proto__.__proto__
下找到了update()
函数,而我却立刻发现了它的属性: 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 */
}
});
这是类的照顾,最常用的方法是正确的存储this
在实例化的时间。 这样做的最常见方法是:
function SomeClass
{
var that = this;
that.myVariable = 5;
that.someFunction = function()
{
return that.myVariable;
}
}
您还具有包装器/代理方法,例如下划线库中的bind
函数所解释的方法,它们可以“强制” this
变量。 参见http://underscorejs.org/#bind
与调用方强制使用this
变量相比,我更喜欢这两种方法。
是的,当您将对象作为参数传递时,它是完全相同的。
它甚至不是对象的精确副本,实际上是同一对象。 参数只是对对象的引用,因此永远不会复制对象。
属性和方法可以是对象本身的成员,也可以是原型链中的成员。 在您的情况下, mapArea
属性是对象本身的成员,而update
方法是原型的成员或作为toplevelOBJ
对象的原型的对象的成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.