将对象作为函数参数传递

时间:2013-02-13 15:57:08

标签: javascript

  • 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}}

2 个答案:

答案 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对象原型的对象。