JavaScript returns "result" 而不是错误或异常
JavaScript returns "result" instead of error or exception
我正在测试一个非常简单的代码,我预计会出错,但我得到了一个字符串“结果”return由控制台编辑!
代码如下:
var person = { name: "Mohammad", last_name: "Kermani"};
var show_person = function (age){
console.log(this.name +" is "+ age + " years old");
}
现在你现在我们不能使用this.name
当JavaScript不知道this
(对象)是什么时,我们需要使用call
或apply
.
现在,当我写这篇文章时,我得到了“结果”字符串 (而不是错误或警告):
show_person(20); //Returns: result is 20 years old
查看Jsfiddle和什么控制台returns。
带有 call
的代码应该是这样的:
show_person.call(person, 20); //Returns: Mohammad is 20 years old
字符串“result”是什么以及为什么 JavaScript 在无法访问 this.name
时不会 return 错误?
如果我们不在函数中使用对象并想获取它的属性之一,会发生什么? (就像这里,我想要获取人物对象的名称)
在该上下文中,this
指的是全局 window
对象。 window.name
在 jsFiddle 上是 "result"
,因为它是结果帧。
Javascript 完全知道这是指什么。只要您的函数未包含在某些特定环境中,此引用就会指向全局对象 window.
这是一段工作代码,可以实现您想要实现的目标:
function PersonShower(){
this.person = { name: "Mohammad", last_name: "Kermani"};
}
PersonShower.prototype.show_person = function (age){
console.log(this.person.name +" is "+ age + " years old");
}
var p = new PersonShower();
p.show_person(20);
PersonShower 现在是一个对象 属性(可以作为构造函数参数传递)
然后为对象原型定义了一个show_person方法
这样,使用this指的是PersoShower实例。
https://jsfiddle.net/57t9sadr/4/
希望对您有所帮助
您可能正在寻找这样的东西:
function Person (opt) {
this.name = opt.name;
this.lastName = opt.lastName;
this.age = opt.age;
}
Person.prototype.showPerson = function () {
console.log(this.name, 'is', this.age, 'old');
}
var muhammed = new Person({
name: 'Muhammed',
lastName: 'Kermani',
age: 20
});
console.log(muhammed.showPerson());
console.log(muhammed.name);
console.log(muhammed.lastName);
window.name
是用于标识 window 对象的保留引用。通常用于识别数据传输的帧。
JSFiddle 使用名为 result 的框架,您可以从中获取该参考。
相比之下,JSBin 使用 "JS Bin Output" 作为 window.name
默认情况下它将是一个空字符串。这就是为什么 window.name 在大多数浏览器中将是一个空字符串,与其他未定义的属性相比,这将是一个例外。
You can learn more about window.name on MDN.
我看你好像很懂词法作用域。如果您希望我解释绑定和词法作用域的工作原理,请告诉我。
我正在测试一个非常简单的代码,我预计会出错,但我得到了一个字符串“结果”return由控制台编辑!
代码如下:
var person = { name: "Mohammad", last_name: "Kermani"};
var show_person = function (age){
console.log(this.name +" is "+ age + " years old");
}
现在你现在我们不能使用this.name
当JavaScript不知道this
(对象)是什么时,我们需要使用call
或apply
.
现在,当我写这篇文章时,我得到了“结果”字符串 (而不是错误或警告):
show_person(20); //Returns: result is 20 years old
查看Jsfiddle和什么控制台returns。
带有 call
的代码应该是这样的:
show_person.call(person, 20); //Returns: Mohammad is 20 years old
字符串“result”是什么以及为什么 JavaScript 在无法访问 this.name
时不会 return 错误?
如果我们不在函数中使用对象并想获取它的属性之一,会发生什么? (就像这里,我想要获取人物对象的名称)
在该上下文中,this
指的是全局 window
对象。 window.name
在 jsFiddle 上是 "result"
,因为它是结果帧。
Javascript 完全知道这是指什么。只要您的函数未包含在某些特定环境中,此引用就会指向全局对象 window.
这是一段工作代码,可以实现您想要实现的目标:
function PersonShower(){
this.person = { name: "Mohammad", last_name: "Kermani"};
}
PersonShower.prototype.show_person = function (age){
console.log(this.person.name +" is "+ age + " years old");
}
var p = new PersonShower();
p.show_person(20);
PersonShower 现在是一个对象 属性(可以作为构造函数参数传递) 然后为对象原型定义了一个show_person方法
这样,使用this指的是PersoShower实例。
https://jsfiddle.net/57t9sadr/4/
希望对您有所帮助
您可能正在寻找这样的东西:
function Person (opt) {
this.name = opt.name;
this.lastName = opt.lastName;
this.age = opt.age;
}
Person.prototype.showPerson = function () {
console.log(this.name, 'is', this.age, 'old');
}
var muhammed = new Person({
name: 'Muhammed',
lastName: 'Kermani',
age: 20
});
console.log(muhammed.showPerson());
console.log(muhammed.name);
console.log(muhammed.lastName);
window.name
是用于标识 window 对象的保留引用。通常用于识别数据传输的帧。
JSFiddle 使用名为 result 的框架,您可以从中获取该参考。
相比之下,JSBin 使用 "JS Bin Output" 作为 window.name
默认情况下它将是一个空字符串。这就是为什么 window.name 在大多数浏览器中将是一个空字符串,与其他未定义的属性相比,这将是一个例外。
You can learn more about window.name on MDN.
我看你好像很懂词法作用域。如果您希望我解释绑定和词法作用域的工作原理,请告诉我。