Javascript 我可以';我不明白
我读的是Mozilla开发者网络,是时候在开始使用node.js之前学习如此严肃的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=函数(){ 警惕(“你好”); }; 这很容易,但是继承会使事情变得复杂。还有人认为以下三种说法在本质上是一样的吗 //定义学生类 函数学
//定义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您部分正确。我的问题和你发布的关于构造师的问题重叠。但这并不完全相同:我想知道为什么需要第二种说法。