首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript原型与新对象混淆

javascript原型与新对象混淆
EN

Stack Overflow用户
提问于 2016-09-05 02:47:40
回答 3查看 54关注 0票数 0

当我走过前面的师父时,我有点困惑。谁能告诉我有什么不同吗?(在创建对象Chordate以及Chordate2和Chordate3?)。HOw他们有根本的不同吗??

我认为总是执行newObject =新构造函数是在javascript中构建新对象的方法,但是这个newObject.prototype =newObject却让我不感兴趣。

代码语言:javascript
复制
  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。

有人能帮我核实一下吗?

EN

回答 3

Stack Overflow用户

发布于 2016-09-05 03:26:53

这就是继承最初是如何在javascript中工作的(甚至对于类,底层机制仍然是一样的)。

基本上,脊索是动物的一个子类。在其他语言中,我们会写:

代码语言:javascript
复制
class Chordate extends Animal {

}

在javascript中,构造函数从对象继承。因为Animal()是一个构造函数,所以我们需要将它转换为一个对象。因此,在javascript中,我们需要:

代码语言:javascript
复制
Chordate.prototype = new Animal(); // extend Animal

prototype属性保存由构造函数创建的对象的原型或模板。在这种情况下,Chordate创建的对象应该看起来像Animal对象。当您调用new Chordate()时,原型将被复制到this中,并作为一个新实例返回。

Chordate2Chordate3只是Animal的实例。从代码和对象的命名来看,它们看起来像是不熟悉javascript的人混淆的代码。我个人希望看到类似chordate2 = new Chordate()的东西。

票数 1
EN

Stack Overflow用户

发布于 2016-09-05 03:20:44

第一个Chordate赋值"Chordate=function(name){this.name=name;}“是分配一个与this.name=name相同的构造函数,然后下一行向Chordate对象添加this.name=name()构造函数。

然后,Chordate2从构造函数赋值开始,然后被重写为一个带有未定义名称属性的动物对象,因为没有任何参数传递给构造函数。

最后,Chordate3只是一个带有未初始化名称属性的动物对象。

票数 0
EN

Stack Overflow用户

发布于 2016-09-05 05:36:17

回答我自己的问题并把它作为答案时,我确实觉得很好笑,但正如@torazaburo所建议的那样,让我成为一个真正提供答案的人(到目前为止,我只问了一个答案),这对我来说是件好事,即使它是错误的,所以就这样:

其中一部分是关于下面究竟是什么的混淆

代码语言:javascript
复制
Object.prototype

我完全理解当函数被创建(动物)时,它指向它自己的原型(这个原型又指向基本对象(它自己的原型)(这是通过向上proto链找到的)。

当Chordate函数被创建时,它指向了它自己的原型。然而,当运行Chordate.prototype =新动物时,它基本上重写了自己的原型,并指向了动物的原型。不管这是否被推荐,我都很想知道原因。我想我更专注于学习这个Object.prototype是如何工作的,以及它与正在创建的otherObject(在这个例子中是动物)之间的关系。 当运行Chordate2时,1)它创建一个函数并让它指向它自己的prototype 2)当您运行新的Chordate2 ()= Chordate2时,它实质上擦除了Chordate2并创建了一个全新的对象,只剩下了Animal.prototype。Chordate2与之的关系是通过__proto__发现的。

相同的概念w/ (除了Chordate3. Chordate3不存在)Chordate3。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39323289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档