1

有人可以清除我的代码做错了什么吗?我是一个完全的新手,只是尝试尝试如何创建对象、原型以及 this 命令在原型上下文中所指的内容。但是,我的代码都没有在 jFiddle 上运行。我知道这段代码完全没有意义,但我只是想找出文档在各种情况下打印的内容,以更具体地了解对象、原型、构造函数和“this”关键字的工作原理。但是什么都没有出现!

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();

​</p>

4

4 回答 4

2
function Person() {
  this.identity = "fellow";
  this.logYou = function() {
    document.write('hi');
  };
};

当您调用关键字时,它指的this.identity = "fellow";是函数运行的上下文。 所以如果你在全局范围内调用函数,指的是对象:this
thiswindow

Person();
alert(window.identity); // fellow

如果你实例化函数,this关键字指的是新对象:

var Dude = new Person();
alert(Dude.identity); // fellow

所以函数Person没有属性identity
如果您想为您的功能提供一些属性:

Person.identity = "fellow";
alert(Person.identity); //  fellow
于 2012-09-01T18:09:32.820 回答
1

logYou并且logMe是存储在原型上的方法,Person以便继承对象可以调用该函数。你不能调用logYouPerson但你可以做的是调用它的孩子,Dude

Dude.logYou(); // hi
Dude.logMe(); // fellow
于 2012-09-01T17:53:49.093 回答
1

这两行

Person.logYou();   
Person.logMe(); 

抛出错误并导致代码停止执行,因为logYou并且logMe不作为Person.

Dude.logMe()并且Dude.logYou()将分别工作、打印fellowhi

于 2012-09-01T17:54:12.103 回答
1

你不能打电话

Person.logYou();  
Person.logMe();

由于 Person 没有方法,logYou或者logMe,当您删除这两行时,您的代码将开始工作

于 2012-09-01T17:54:20.123 回答