为什么这个对象初始化有效?

时间:2016-02-24 14:40:08

标签: javascript

我像这样做一个经典的JavaScript对象初始化,它就像一个魅力:

function Hero(a, n) {                                                            
    this.nom = a;                                                                
    this.job = n;                                                                
    this.quiSuisJe = function() {
        return "Mon nom est "+this.nom+" et je suis un "+this.job;
    } 
}                                                                                
var x = new Hero("Joe", "Ninja");                                                
var y = new Hero("Jinx", "Carry AD");                                            
console.log(x.quiSuisJe());                                                      
console.log(y.quiSuisJe()); 

但是,如果我像这样更改quiSuisJe函数:

function Hero(a, n) {                                                            
    this.nom = a;                                                                
    this.job = n;                                                                
    this.quiSuisJe = function() {
        return "Mon nom est "+a+" et je suis un "+n;
    } 
}                                                                                
var x = new Hero("Joe", "Ninja");                                                
var y = new Hero("Jinx", "Carry AD");                                            
console.log(x.quiSuisJe());                                                      
console.log(y.quiSuisJe()); 

有效。为什么呢?

1 个答案:

答案 0 :(得分:0)

构造函数仍然是一个函数,所以既然你已经在其中声明了一个函数,那么你基本上就创建了一个闭包。这意味着在这个新函数中,您可以访问顶级函数的属性。当然,仅仅因为你可以访问它,并不意味着你应该像这样使用它。请尝试使用this,就像您在第一个示例中一样。