var Apple = function() {
    this.hello = 'alrightalrightalright';
}

var Banana = function() {
    this.howdy = 'matthew mcconaughhey';
        console.log(a.hello); // returns 'alrightalrightalright';
}

var a = new Apple();
var b = new Banana();


在上面的代码(这是我已经拥有的简化形式)中,我想从hello函数中调用Apple函数的Banana属性。显然,由于a.helloBanana的实例,因此可以通过a函数中的Apple来执行此操作。但是,这在以后的阶段在您重新访问代码时可能容易出错。

有没有一种方法可以从另一个函数中引用hello函数的Apple属性而不引用实例?

最佳答案

要从字面上回答您的问题,以您编写Apple对象的方式进行编码时,不能不使用hello对象的实例而不能访问Apple属性。

hello属性仅存在于Apple对象的实例上,因此必须具有该对象的实例才能像a.hello中那样引用该属性。



您可以重新设计hello属性的存储位置,以便可以使用Apple对象的实例访问它,但这意味着更改该属性的定义位置。

例如,可以通过这样定义它来使它成为一个静态变量(它不是任何特定Apple对象的属性):

var Apple = function() {

}

Apple.hello = 'alrightalrightalright';


然后,您可以像这样引用它:

var Banana = function() {
    this.howdy = 'matthew mcconaughhey';
    console.log(Apple.hello); // returns 'alrightalrightalright';
}

var b = new Banana();


但是,请记住,这会更改hello属性的行为。现在,它不是每个Apple对象的单独属性。相反,它实际上是Apple函数对象上的单个全局属性。无论您有多少Apple实例,它都只有一个值,您可以使用Applethis.hello对象内引用它,因为它不再是每个Apple对象的属性。对它的所有引用都必须为Apple.hello



最后,您需要确定这是否确实是Apple对象的一个​​属性,该属性可能对每个单独的Apple对象都具有唯一的值,或者这是否仅仅是您自己的static变量可以只定义一次并从任何地方引用一个定义。

08-08 05:28
查看更多