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]: