var a = {
name: 'zhangsan',
getName: function() {
alert(name)
}
};
a.getName();
为什么警告""
而不是this
前面没有name
的错误?
答案 0 :(得分:2)
在名为name的窗口对象上有一个属性,其默认值为"" http://www.w3schools.com/jsref/prop_win_name.asp
答案 1 :(得分:2)
因为在这一行:
alert(name);
... name
是一个简单的变量引用。在这种情况下,它解析为全局变量name
(窗口的名称,因为全局变量是全局对象的属性,浏览器上的全局对象是窗口)。
要使用对象的name
属性,必须明确地执行此操作:
alert(this.name);
答案 2 :(得分:1)
name
未在您的函数范围和它的父级(window
)中定义(由您)。要引用对象本身,您必须使用this
:
var a = {
name: 'zhangsan',
getName: function() {
alert(this.name);
}
};
a.getName();
PS:显然window.name
确实存在,并且代码中的name
指的是它,因此不会抛出错误但返回的值不正确。
答案 3 :(得分:0)
这很容易理解:
var name = "asdasdasd";
var a = {name: 'zhangsan', getName: function() {
alert("A name : " + name);
alert("A this.name : " + this.name);
}};
var b = {name: 'BBBBasfdasdasd', getName: function() {
alert("B name : " + name);
alert("B this.name : " + this.name);
}};
a.getName();
b.getName();
您可以在此处试用:http://jsfiddle.net/jvEq2/1/
答案 4 :(得分:0)
在您的函数中,您没有使用引用对象本身的this
。
这样做:
var a = {name: 'zhangsan', getName: function() {
alert(this.name)}
};
a.getName();
另外我认为你已经有了一个全局变量名,其值为""
,否则你应该有ReferenceError