Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以';我不明白_Javascript_Prototype_Prototype Programming_Prototypal Inheritance - Fatal编程技术网

Javascript 我可以';我不明白

Javascript 我可以';我不明白,javascript,prototype,prototype-programming,prototypal-inheritance,Javascript,Prototype,Prototype Programming,Prototypal Inheritance,我读的是Mozilla开发者网络,是时候在开始使用node.js之前学习如此严肃的Javascript了 不管怎么说,继承的事情对我来说似乎很模糊。从文档中复制和粘贴: //定义Person类 函数Person(){} Person.prototype.walk=函数(){ 警惕(“我在走路!”); }; Person.prototype.sayHello=函数(){ 警惕(“你好”); }; 这很容易,但是继承会使事情变得复杂。还有人认为以下三种说法在本质上是一样的吗 //定义学生类 函数学

我读的是Mozilla开发者网络,是时候在开始使用node.js之前学习如此严肃的Javascript了

不管怎么说,继承的事情对我来说似乎很模糊。从文档中复制和粘贴:

//定义Person类
函数Person(){}
Person.prototype.walk=函数(){
警惕(“我在走路!”);
};
Person.prototype.sayHello=函数(){
警惕(“你好”);
};
这很容易,但是继承会使事情变得复杂。还有人认为以下三种说法在本质上是一样的吗

//定义学生类
函数学生(){
//调用父构造函数
打电话给(这个);
}
//继承人
Student.prototype=新人();
//更正构造函数指针,因为它指向Person
Student.prototype.constructor=Student;
我理解第一个(调用父构造函数),因为它与Java、PHP等非常相似。但问题开始了

为什么需要调用
Student.prototype
Student.prototype.constructor

需要一个明确的解释。为什么要使用此代码:

//定义学生类
函数学生(){
//调用父构造函数
打电话给(这个);
}
var student1=新学生();
继承还不足以起作用吗


编辑:关于构造函数的问题,它已经得到了回答。

如果您使用的是Node.js,我建议您研究ECMAScript 5方法来创建对象。另请参见新方法的说明。当您来自Java这样的经典OO语言时,很难理解原型继承。祝你好运

这不起作用:

function Student() {
  Person.call(this);
}

var student1 = new Student();
因为
Person
的原型属性在
Student
实例上不可用
Person.call(this)
仅使用特定的
this
值(即
Student
实例)调用
Person
。但是
Person
函数是完全空的,所以在这里它什么也不做。除了无用的
Person
调用之外,
Student
Person
之间没有任何关系

要获得
人员
的功能,必须分配
.prototype

之前:


它的原型:Student.prototype,具有所有Student函数
它的原型:Object.prototype
之后:


它的原型:,如果你添加了所有的学生函数
它的原型:Person.prototype,具有所有Person函数
它的原型:Object.prototype

不存在“面向对象的JavaScript”的可能副本,JavaScript是面向原型的,您必须使您的面向对象方法适应原型。@Chiguireitor我没有写文档标题,您知道…@pimvdb您部分正确。我的问题和你发布的关于构造师的问题重叠。但这并不完全相同:我想知道为什么需要第二种说法。