有人可以清理我的代码错误吗?我是一个全新的,只是试图尝试如何创建对象,原型,以及此命令在原型的上下文中引用的内容。但是,我的代码都没有在jFiddle上运行。我知道这段代码完全没有意义,但我只想找出文档在各种情况下打印的内容,以便更加具体地了解对象,原型,构造函数和“this”关键字的工作原理。但是NOTHING正在出现!
function Person(identity) {
this.identity = "fellow";
this.logYou = function() {
document.write('hi');
};
};
Person.prototype.logMe = function() {
document.write(this.identity);
};
var Dude = new Person("stud");
Person.logYou();
Person.logMe();
Dude.logMe();
答案 0 :(得分:2)
function Person() {
this.identity = "fellow";
this.logYou = function() {
document.write('hi');
};
};
当您致电this.identity = "fellow";
时,this
关键字会引用正在运行该功能的上下文。
因此,如果您在全局范围内调用该函数,this
引用window
对象:
Person();
alert(window.identity); // fellow
如果您实例化该功能,this
关键字指的是新对象:
var Dude = new Person();
alert(Dude.identity); // fellow
所以函数Person
没有属性identity
如果你想为你的功能提供一些属性:
Person.identity = "fellow";
alert(Person.identity); // fellow
答案 1 :(得分:1)
logYou
和logMe
是存储在Person
原型上的方法,以便继承对象可以调用该函数。您无法在logYou
上拨打Person
,但您可以做的是在其子级Dude
上调用它:
Dude.logYou(); // hi
Dude.logMe(); // fellow
答案 2 :(得分:1)
这两行
Person.logYou();
Person.logMe();
因为logYou
和logMe
不存在Person
的属性而引发错误,因为代码停止执行。
Dude.logMe()
和Dude.logYou()
将有效,分别打印fellow
和hi
。
答案 3 :(得分:1)
你不能打电话
Person.logYou();
Person.logMe();
由于Person没有方法logYou
或logMe
,当您删除这两行时,您的代码将开始工作