【问题标题】:Basic Object/Prototype Syntax Issues基本对象/原型语法问题
【发布时间】:2012-09-01 17:50:17
【问题描述】:

有人可以澄清我的代码有什么问题吗?我是一个完全的新手,只是尝试尝试如何创建对象、原型以及 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();

【问题讨论】:

标签: javascript


【解决方案1】:
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

【讨论】:

    【解决方案2】:

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

    Dude.logYou(); // hi
    Dude.logMe(); // fellow
    

    【讨论】:

      【解决方案3】:

      这两行

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

      由于logYoulogMe 不作为Person 的属性存在,因此引发错误并导致代码停止执行。

      Dude.logMe()Dude.logYou() 可以工作,分别打印 fellowhi

      【讨论】:

        【解决方案4】:

        你不能打电话

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-03-14
          • 1970-01-01
          • 2019-03-17
          • 1970-01-01
          • 1970-01-01
          • 2012-07-07
          • 1970-01-01
          相关资源
          最近更新 更多