我是javascript的新手。我正在做一些“对象文字”。下面是我正在尝试的代码。 BodyLoaded是body标签的onload事件的事件处理程序。
// works - getName返回“bingo”
function BodyLoaded()
{
var dog = {
name: "defaultname",
getName: function () {
return name;
},
setName: function (n) {
name = n;
}
};
dog.setName("bingo");
console.log(dog.getName());
}
//也适用 - getName返回“bingo”
function BodyLoaded()
{
var dog = {
name: "defaultname",
getName: function () {
return this.name;
},
setName: function (n) {
this.name = n;
}
};
dog.setName("bingo");
console.log(dog.getName());
}
//不起作用 - getName返回“”
function BodyLoaded()
{
var dog = {
name: "defaultname",
getName: function () {
return this.name;
},
setName: function (n) {
name = n;
}
};
dog.setName("bingo");
console.log(dog.getName());
}
上面的代码在调用getName(“bingo”)时返回预期的结果。但是如果我在getName函数中返回this.name,它将返回并清空字符串。奇怪的是,如果我在两个函数(setName和getName)中使用this.name,代码工作正常并返回预期值(“bingo”)。试图理解这种行为。
答案 0 :(得分:2)
当您从方法返回name
时,它实际上会返回window.name
,因为不涉及上下文。
当您致电this.name
时,this
指向具有dog
属性的name
对象,以便返回该属性。
答案 1 :(得分:1)
如果在设置this
值时未指定name
,则设置的实际变量将为window.name
。但是当您使用this.name
时,设置的实际值将为dog.name
。只需修改下面给出的代码,然后看看。
function BodyLoaded()
{
var dog = {
name: "defaultname",
getName: function () {
return this.name;
},
setName: function (n) {
this.name = n;
}
};
dog.setName("bingo");
console.log(dog.getName());
}
但是根据你给出的代码,我无法理解获取空字符串的原因。如果实际应该输出值defaultname
。
答案 2 :(得分:0)
function Dog() {
var self = this;
this.name = "defaultname";
this.getName = function () {
return this.name;
// same as
// return self.name
}
}
var myDog = new Dog();
myDog.getName(); // defaultname