基本对象/原型语法问题

Basic Object/Prototype Syntax Issues

本文关键字:语法 问题 原型 对象      更新时间:2023-09-26

有人能澄清我代码中的错误吗?我是一个新手,只是尝试如何创建对象、原型,以及这个命令在原型上下文中指的是什么。然而,我的代码都没有在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();

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

logYoulogMe是存储在Person原型上的方法,因此继承对象可以调用该函数。您不能在Person上调用logYou,但您可以在其子级Dude:上调用它

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

这两行

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

抛出错误并导致代码停止执行,因为logYoulogMe不作为Person的属性存在。

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

您不能调用

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

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