从另一个函数中调用函数的属性

时间:2014-03-06 06:02:48

标签: javascript function scope

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.hello函数中Banana执行此操作,因为aApple的实例。但是,当您重新访问代码时,这可能在后期阶段容易出错。

有没有办法可以在不引用实例的情况下从另一个函数引用hello函数的Apple属性?

2 个答案:

答案 0 :(得分:1)

你可以把它变成静态属性。

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

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

答案 1 :(得分:1)

要按字面意思回答您的问题,不使用您对Apple对象进行编码的方式,如果没有hello对象的实例,则无法访问Apple属性。

hello属性仅存在于Apple对象的实例上,因此您必须拥有该对象的实例才能在a.hello中引用该属性。< / p>


您可以重新设计存储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对象中引用它,因为它不是每个{{1}的属性对象了。所有对它的引用都需要Apple


最后,您需要确定这是否真的应该是Apple.hello对象的属性,该属性可能对每个单独的Apple对象具有唯一值,或者如果这只是一个Apple变量,您只需定义一次,并从任何地方引用该定义。