javascript原型继承-Javascript中原型和继承之间的关系是什么?

介绍

明天给大家讲讲Javascript中原型继承的关系。 很多人可能对此还不是很了解。 为了让大家更好的理解,小编为大家总结了以下内容。 我希望你能从这篇文章中学到一些东西。 报酬。

一般来说,Javascript中的对象是一个指向原型的指针和它自己的属性列表。 JavaScript 在创建对象时使用写时复制的概念。

只有构造函数才具有强大的原型属性。 原型链继承就是创建一个新的指针javascript原型继承,指向构造函数的原型属性。

原型属性之所以特殊,是因为Javascript读取属性时的遍历机制。 本质上它只是一个普通的表针。

构造函数包括:

2.1. 对象字段函数

javascript原型继承_原型继承的原理_原型继承和类继承的区别

3.

4.日期

5.字符串

下面我们举一些例子

//每个函数都有一个默认的属性原型,而这个构造函数原型的默认指向这个函数//注意Person.constructor 不等于,Person.prototype.constructor只函数实例自带构造函数属性
  functionPerson(名字){
  this.name =,名称;
  };
  Person.prototype.getName =function () {
  returnthis.name;
  };
  var  p&nbsp=newPerson (“ZhangSan&quot);
  console.log (Person.prototype.constructor===人);//,真的
  console.log (p.constructor===人);//,true ,这是因为p本身不包含构造函数属性,所以这里其实调用的是Person.prototype.constructor 

我们的目的是表达

1.表明人类遗传自植物

2.证明p2是一个人的实例

我们把原型属性的方向改变一下,这样人就可以获得植物中属的原型,即人继承于植物(人是野兽),

 functionPerson(名字){
  this.name =,名称;
  };
  Person.prototype.getName =function () {
  returnthis.name;
  };
  var  p1&nbsp=newPerson (“ZhangSan&quot);
  console.log (p.constructor===人);//,真的
  console.log (Person.prototype.constructor===人);//,真的
  functionAnimal () {}
  Person.prototype =newAnimal();//之所以不采用Person.prototype =, Animal.prototype,是因为new 还有其他功能,最后总结。
  var  p2&nbsp=newPerson (“ZhangSan&quot);//(p2 →, Person.prototype →, Animal.prototype,,所以p2.constructor其实就是Animal.prototype.constructor)
  console.log (p2.constructor===人);//,输出为false ,但我们的本意是要这里为真实的,表明p2是人的实例。此时目的1达到了,目的2没达到。

但如果我们修改

 Person.prototype =, new 动物();
  时间=Person.prototype.constructor 人;

原型继承和类继承的区别_javascript原型继承_原型继承的原理

这时候p2.consturctor就对了,指向一个人,说明p2是一个人的实例,新的问题又出现了。 此时目标2达到了javascript原型继承,但是目标1没有达到。

目的1和目的2此时是相互矛盾的,因为原型此时表达了两种矛盾的含义,

1.表明父类是谁

2.复制为您自己实例的原型

为此,我们不能直接使用prototype属性来表明父类是谁,而是使用getPrototypeOf()方法来知道父类是谁

 Person.prototype =newAnimal ();
  Person.prototype.constructor=人;
  var  p2&nbsp=newPerson (“ZhangSan&quot);
  p2.constructor//显示,function 人(),{}
  Object.getPrototypeOf (Person.prototype) .constructor//显示,function 动物(),{}

原型继承的原理_原型继承和类继承的区别_javascript原型继承

这区分了这两个概念。 虽然通过使用hasOwnProperty()方法,什么时候访问实例属性和什么时候访问原型属性是很清楚的。

你最近做了什么?

当代码varp=new()执行时,new做了以下事情:

创建一个空白对象

创建指向 Person.prototype 的指针

通过this关键字将此对象传递给构造函数并执行构造函数。

javascript原型继承_原型继承和类继承的区别_原型继承的原理

具体来说,在下面的代码中,

人物.原型。 获取名称=函数(){}

如果我们通过

 var  person =newPerson ();
  其实类似于
  var  person&nbsp=newObject ();
  person.getName =Person.prototype.getName; 

为此目的调用 person.getName() 时,this 指向新创建的对象,而不是原型对象。

当向现有功能添加新功能时,这似乎很有用。 我们可以像这样扩展现有的方法:

//functionmyFunc的写法基本等于,varmyFunc=,new function(); functionmyFunc(){}myFunc=function (function){//你可以在这里做点别的事 returnfunction(){//你可以在这里做点别的事 returnfunc.apply(parameter);}}(myFunc) 之间有什么关系Javascript 中的原型和继承