2015-01-13 88 views
1

在BusMonitor对象中,”this“指的是窗口对象,这就是为什么当我在BusMonitor对象上调用BaseFunction.call(this)时,为什么”name“属性变成全局脚本的全局脚本。只提供给BusMonitor对象的属性。那怎么办?这个“是指窗口对象

function BaseFunction() { 

    this.name = "test"; 

} 

var BusMonitor = function() { 

    BaseFunction.call(this); 

    return { 
     init: function() { 
     } 
    } 

}(); 

我可以通过下面的方式做到这一点,但我不希望这样的创建对象。

function BusMonitor() { 

    BaseFunction.call(this); 

    return { 
     init: function() { 

     } 
    } 

}; 

var busMonitor = new BusMonitor(); 
busMonitor.init(); 

回答

0

你可以,如果可能的话,当然,首先要创建对象,然后把它传递给BaseFunction

function BaseFunction() { 
    this.name = "test"; 
} 

var BusMonitor = function() { 
    var obj = { 
     init: function() { } 
    }; 

    BaseFunction.call(obj); 

    return obj; 
}(); 
0

您可以定义一个localScope BusMonitor持有名称值,如下所示:

function BaseFunction() { 
    this.name = "test"; 
} 

var BusMonitor = function() { 
    var localScope = {}; 
    BaseFunction.call(localScope); 
    console.log("local name:" + localScope.name); 
    return { 
     init: function() { 
     } 
    } 

}(); 
console.log("global name: " + name);