Javascript OOP-为什么这两个几乎完全相同的语句给出不同的输出
Javascript OOP - Why do these two almost exact same statements give different outputs?
所以我对整个"正确"的Javascript编程是个新手。我只真正将它用于简单的DOM操作,并对jQuery有所涉猎。现在我正在尝试学习Javascript编程的全部概念,包括OOP等。我喜欢认为我对JS中的范围有一点了解,但我不能理解:
function Person(name, age){
this.name = name;
this.age = age;
this.getName = function(){
return name;
}
this.setName = function(name){
this.name = name;
}
this.getAge = function(){
return age;
}
this.setAge = function(age){
this.age = age;
}
}
p = new Person("Bob", 12);
console.log(p.getName());
console.log(p.getAge());
console.log(name); //logs "an empty string" - What?
console.log(age); //logs "ReferenceError: age is not defined" - Expected
在前两个console.log
表现良好后,我想检查Person
函数中属性的值,以确保没有超出范围。name
在某种程度上有(只给出了一个空值,但仍然存在),但年龄没有。
我看不到任何拼写错误,这是我唯一能理解的导致这个问题的原因。那么为什么console.log(name);
不给出ReferenceError
呢?
尽管我很想知道答案,但我非常感谢对根本问题的全面解释,包括任何关键术语,如原型、词汇范围、提升等。
name
标识符存在于浏览器的全局作用域中,它是window
的一个属性。
参见window.name
。
您根本没有使用原型,最好将函数放在构造函数原型上。有关构造函数函数和原型的更多信息,你可以查看这个答案。
至于为什么不记录年龄;这是因为你试图登录window.age而不是p.age
p = new Person("Bob", 12);
console.log(p.name);
console.log(p.age);
console.log("this is:",this);
console.log("does window have a name property?",typeof this.name);
console.log("does window have an age property?",typeof this.age);
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 在JavaScript中输出转义字符
- 如何在jQuery中将函数的输出分配给变量
- Javascript OOP-为什么这两个几乎完全相同的语句给出不同的输出
- for语句循环小写输出
- 在 HTML 中循环写入(输出)语句
- JavaScript - 为什么在使用语句之前声明的变量时与 if/else 语句的输出不同
- 与 for 的结果混淆..在语句 JS 输出中
- 使用Switch语句的JavaScript-没有得到预期的输出
- 输出在 JavaScript 中不带语句
- Javascript if/else语句不返回任何输出
- 通过if else语句显示特定的输出
- Meteor Template不会在每个语句中输出数据
- “甚至Steven"输出奇数的While语句取代偶数
- 返回错误输出的Javascript条件语句
- 淡出使用if语句输入和输出
- 复杂的if语句运行代码而不考虑条件输出
- 如果..否则如果..语句在 JavaScript 中没有给出任何输出
- Javascript对象未定义关键字在输出语句结束