当我走过前面的师父时,我有点困惑。谁能告诉我有什么不同吗?(在创建对象Chordate以及Chordate2和Chordate3?)。HOw他们有根本的不同吗??
我认为总是执行newObject =新构造函数是在javascript中构建新对象的方法,但是这个newObject.prototype =newObject却让我不感兴趣。
Animal = function(name){this.name = name};
Animal.prototype.eats = function(){
return this.name + " is eating"
}
Chordate = function(name){this.name = name;}
Chordate.prototype = new Animal();
Chordate2 = function(name){this.name = name;}
Chordate2 = new Animal();
Chordate3 = new Animal();-我自己的答案--
也许我需要看更多的视频(因为我想他们会说这是不推荐的,但我现在明白这是如何工作的。)这是我的困惑和澄清。
创建的每个函数(这是另一个对象)都指向它自己的原型(基本上是对象),它已经是一个对象,并且它自己的原型指向它自己的对象( prototype ),这一行(Chordate.prototype=新的动物();)正在将.prototype点更改为动物原型。(这看起来确实很烦人,我需要更多的阅读和观看)。
因此,基于这个Chordate2的原型也是它自己的原型,当您在它上运行新的动物时,它只会擦除存在的Animal.prototype。
相同的w/ (除了Chordate3. Chordate3不存在)Chordate3。
有人能帮我核实一下吗?
发布于 2016-09-05 03:26:53
这就是继承最初是如何在javascript中工作的(甚至对于类,底层机制仍然是一样的)。
基本上,脊索是动物的一个子类。在其他语言中,我们会写:
class Chordate extends Animal {
}在javascript中,构造函数从对象继承。因为Animal()是一个构造函数,所以我们需要将它转换为一个对象。因此,在javascript中,我们需要:
Chordate.prototype = new Animal(); // extend Animalprototype属性保存由构造函数创建的对象的原型或模板。在这种情况下,Chordate创建的对象应该看起来像Animal对象。当您调用new Chordate()时,原型将被复制到this中,并作为一个新实例返回。
Chordate2和Chordate3只是Animal的实例。从代码和对象的命名来看,它们看起来像是不熟悉javascript的人混淆的代码。我个人希望看到类似chordate2 = new Chordate()的东西。
发布于 2016-09-05 03:20:44
第一个Chordate赋值"Chordate=function(name){this.name=name;}“是分配一个与this.name=name相同的构造函数,然后下一行向Chordate对象添加this.name=name()构造函数。
然后,Chordate2从构造函数赋值开始,然后被重写为一个带有未定义名称属性的动物对象,因为没有任何参数传递给构造函数。
最后,Chordate3只是一个带有未初始化名称属性的动物对象。
发布于 2016-09-05 05:36:17
回答我自己的问题并把它作为答案时,我确实觉得很好笑,但正如@torazaburo所建议的那样,让我成为一个真正提供答案的人(到目前为止,我只问了一个答案),这对我来说是件好事,即使它是错误的,所以就这样:
其中一部分是关于下面究竟是什么的混淆
Object.prototype我完全理解当函数被创建(动物)时,它指向它自己的原型(这个原型又指向基本对象(它自己的原型)(这是通过向上proto链找到的)。
当Chordate函数被创建时,它指向了它自己的原型。然而,当运行Chordate.prototype =新动物时,它基本上重写了自己的原型,并指向了动物的原型。不管这是否被推荐,我都很想知道原因。我想我更专注于学习这个Object.prototype是如何工作的,以及它与正在创建的otherObject(在这个例子中是动物)之间的关系。 当运行Chordate2时,1)它创建一个函数并让它指向它自己的prototype 2)当您运行新的Chordate2 ()= Chordate2时,它实质上擦除了Chordate2并创建了一个全新的对象,只剩下了Animal.prototype。Chordate2与之的关系是通过__proto__发现的。
相同的概念w/ (除了Chordate3. Chordate3不存在)Chordate3。
https://stackoverflow.com/questions/39323289
复制相似问题