Javascript访问函数内部的父对象

Javascript访问函数内部的父对象,javascript,json,Javascript,Json,我有这辆车的功能: var Car = function(vendor, model, year) { return { vendor: vendor, model: model, year: year, name: (function() { return vendor + " " + model + " " + year; })() }; }; var foo = Car(

我有这辆车的功能:

var Car = function(vendor, model, year) {
    return {
        vendor: vendor,
        model: model,
        year: year,
        name: (function() {
            return vendor + " " + model + " " + year;
        })()
    };
};
var foo = Car("Toyota","Corola",2007);
alert(foo.name);  //alerts "Toyota Corola 2007"
这是可行的,但我希望
名称
能够根据
供应商
型号
年份
进行更改

taxi.vendor = "Mitsubishi";
alert(taxi.vendor); //still alerts "Toyota Corola 2007"
如何根据
供应商
属性的变化使其发出警报

编辑:和catch--
名称必须保留为不需要作为函数调用的属性。

如何:

 var Car = function(thevendor, themodel, theyear) {
    this.vendor = thevendor;
    this.model = themodel,
    this.year = theyear,
    this.name = function() {
            return this.vendor + " " + this.model + " " + this.year;
        };
    return this;
};


var foo = new Car("Toyota","Corola",2007);
alert(foo.name());  //alerts "Toyota Corola 2007"

foo.vendor = "Mitubishi";
alert(foo.name());  //alerts "Mistubishi Corola 2007"
JSFiddle for this code:

当您使用
name:(function(){return vendor+“”+model+“”+year;})时(
),这意味着
name
属性将设置为执行此函数的结果。当您创建一辆新的
汽车时会发生这种情况。但听起来好像你想动态更新,所以考虑一下<代码>名称<代码>是一个吸收器函数,而不是一个字符串属性:

var Car = function(vendor, model, year) {
    return {
        vendor: vendor,
        model: model,
        year: year,
        name: function() { return this.vendor + " " + this.model + " " + this.year; }
    };
};
name:function(){return vendor+“”+model+“”+year;}


然后,您可以执行警报(taxi.name())
,这将动态连接供应商、型号和年份字符串。

对于最新版本的WebKit(Safari、Chrome)或Firefox,您可以:

然后你会这样做:

var Car = function(vendor, model, year) {
    return {
        vendor: vendor,
        model: model,
        year: year,
        get name() { return this.vendor + " " + this.model + " " + this.year; }
    };
};
并得到你想要的结果

我不知道IE或Opera是否支持此版本或哪个版本。如果您需要支持除最近的Safari、Chrome或Firefox浏览器以外的任何浏览器,那么最好使用函数访问名称,而不是将其作为属性:

var Car = function(vendor, model, year) {
    return {
        vendor: vendor,
        model: model,
        year: year,
        name: function() { return this.vendor + " " + this.model + " " + this.year; }
    };
};
然后:

var foo = Car("Toyota","Corola",2007);
alert(foo.name());  //alerts "Toyota Corola 2007"
foo.vendor = "Mitsubishi";
alert(foo.name());  //alerts "Mitsubishi Corola 2007"

不使用
名称
函数是否可行?如果您不想使用
名称
函数,则必须使用setter函数(例如
设置供应商
设置模型
,以及
设置年份
),以便每次更改时都可以重新创建
名称
。你也可以使用另一个评论提到。我有麻烦,我没有检查之前的帖子![先前的冷静讨论][1][1]: