繁体   English   中英

将对象作为函数参数传递

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM