为什么这段代码有用......
var message = {
texts: {
text1: 'Hello',
text2: 'World'
},
greet: function() {
console.log(this.texts.text1 + ' ' + this.texts.text2 + '!');
}
}
message.greet();
......但这不是吗?
var message = {
texts: {
text1: 'Hello',
text2: 'World'
},
both: this.texts.text1 + ' ' + this.texts.text2 + '!',
greet: function() {
console.log(this.both);
}
}
message.greet();
它给了我"两者都没有定义"错误。我在这里错过了什么? this.both
出了什么问题?对于对象文字来说,我是新手
答案 0 :(得分:6)
因为在第二种情况下,this
在定义both
时仍然不存在。如果您将both
转换为方法,例如此示例:http://jsfiddle.net/YyWMQ/,则可以使用。
both: function(){ return this.texts.text1 + ' ' + this.texts.text2 + '!'}
Imho,好问题,+ 1
答案 1 :(得分:1)
var message = {
texts: {
text1: 'Hello',
text2: 'World'
},
// here this refers to the scope where message is defined
both: this.texts.text1 + ' ' + this.texts.text2 + '!',
greet: function() {
console.log(this.both);
}
}
message.greet();
要了解它,您可以尝试如下所示
this.texts = {
text1: 'Alternate Hello',
text2: 'World'
};
var message = {
texts: {
text1: 'Hello',
text2: 'World'
},
// here this refers to the scope where message is defined
both: this.texts.text1 + ' ' + this.texts.text2 + '!',
greet: function() {
console.log(this.both);
}
}
message.greet();
答案 2 :(得分:1)
你的误解在以下几行:
both: this.texts.text1 + ' ' + this.texts.text2 + '!',
您可以使用as函数并返回如下值:
both: function(){ return this.texts.text1 + ' ' + this.texts.text2 + '!'; } ,
最后
greet: function() {
console.log(this.both());
}
答案 3 :(得分:1)
当调用greet时,`this'将是父obj消息。当您实际构建消息对象时,情况并非如此。你可以写类似的东西:
var Message = function () {
this.texts = {
text1: 'Hello',
text2: 'Word'
}
this.both = this.texts.text1 + ' ' + this.texts.text2 + '!';
}
Message.prototype.greet = function () {
console.log(this.both);
}
message = new Message();
message.greet();