我正在测试一个非常简单的代码,但我得到了错误,但我得到了一个字符串"结果"由控制台返回!
以下是代码:
var person = { name: "Mohammad", last_name: "Kermani"};
var show_person = function (age){
console.log(this.name +" is "+ age + " years old");
}
现在,当JavaScript不知道this.name
(对象)是什么时,我们现在无法使用this
,那么我们需要使用call
或apply
现在,当我写这篇文章时,我得到了#34;结果" string (而不是错误或警告):
show_person(20); //Returns: result is 20 years old
请参阅Jsfiddle以及控制台返回的内容。
call
的代码应该是:
show_person.call(person, 20); //Returns: Mohammad is 20 years old
什么是字符串"结果"以及当JavaScript无法访问this.name
如果我们不在某个功能中使用某个对象并希望获得其中一个属性会发生什么? (就像在这里,我想得到一个人的名字对象)
答案 0 :(得分:4)
在该上下文中,this
指的是全局window
对象。而且window.name
在jsFiddle上是"result"
,因为它是结果框架。
答案 1 :(得分:1)
Javascript完全知道这是指什么。只要您的函数未包含在某个特定环境中,此引用将指向全局对象窗口。
答案 2 :(得分:1)
你可能正在寻找这样的东西:
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);
答案 3 :(得分:0)
以下是您正在尝试实现的一段代码:
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现在是一个具有person属性的对象(可以作为构造函数参数传递) 然后为对象原型定义show_person方法。
这样,使用它指的是PersoShower实例。
https://jsfiddle.net/57t9sadr/4/
希望有所帮助
答案 4 :(得分:0)
window.name
是用于标识窗口对象的保留引用。通常用于识别数据传输的帧。
JSFiddle使用名为 result 的框架,您可以从中获取该引用。
相比之下,JSBin使用“JS Bin Output”作为window.name
默认情况下,它将是一个空字符串。这就是为什么window.name在大多数浏览器中都是一个空字符串,与其他未定义的属性相比,这将是一个例外。
You can learn more about window.name on MDN.
我可以看到你似乎理解词汇范围。如果您想让我解释一下绑定和词汇范围是如何工作的,请告诉我。