美文网首页
js原型继承_proto_、prototype总结

js原型继承_proto_、prototype总结

作者: 海_d4ab | 来源:发表于2018-06-12 15:30 被阅读0次

其实在工作中使用原型继承非常简单,只是为构建函数的prototype属性(这个属性本身就是一个对象)添加想要的方法,然后通过此构建函数new出来的实例就都可以使用这些方法了。

(构建函数与普通函数的区别也很简单,构建函数是一个函数初始化的过程,没有返回值;普通函数一般都是为了服务于某功能所以一般都会返回某个值,如果执行一个没有返回值的函数会得到undefined的结果,而如果对一个有返回值的函数执行new的操作则会报错此函数不是构造函数)。

此处作总结是因为虽然工作上要使用原型继承很简单,但是面试时面试官问到这个时要回答起来比较麻烦,所以总结一下这题目里的这两个属性。

首先是除了函数外,任何一个对象都自带_proto_这个属性,这个属性的初始化会指向对象的原型的prototype属性。

也就是var a=new B();的时候,实际上会在实例化a的同时,执行a._proto_=B.prototype;的过程,于是当在a上面访问某个方法时,如果a本身没有这个方法,就会去找a._proto_,由于它指向了B.prototype,然后就在B.prototype上面找了,然后由于任何对像都自带_proto_属性的,如果在B.prototype身上还没找到对应方法,就会去找B.prototype._proto_,然后再找下一层(此时一般是之前就对B.prototype进行了其他赋值,如B.prototype=C.prototype,或者B.prototype=D{},又或者B.prototype=new C()这样的操作,才有下一步,否则就已经到Object.prototype了),一直找到Object.prototype,如果还是没找到,就返回undefined;

至于prototype属性(这是一个对象),它只存在于函数(包括普通函数与构建函数)以及Object身上,其他类型的数据是没有的,比如函数的实例化是没有的:var p=new B();p.prototype为undefined;

(其实就是每个对像身上都有一个用于实现继承的属性,在函数身上是prototype,在其他数据身上是_proto_,有prototype的不会同时出现_proto_,反之亦然)

相关文章

  • js原型继承_proto_、prototype总结

    其实在工作中使用原型继承非常简单,只是为构建函数的prototype属性(这个属性本身就是一个对象)添加想要的方法...

  • js中的原型_proto_、原型链、prototype、cons

    _proto_(原型) js中每一个对象都有一个_proto_(原型)对象,它指向他构造函数的prototype(...

  • JS中继承的实现

    JS中继承的实现 #prototype (js原型(prototype)实现继承) 全局的Function对象没有...

  • js中原型链

    一直不太明白JS中prototype和_proto_的区别,对原型链的继承也很模糊,就把自己网上看的书中提到的能便...

  • JavaScript 原型链学习

    JavaScript prototype 与 _proto_(原型链解析) prototype 概念 protot...

  • JS继承的几种方式

    关于Js继承的几种方式,总结一下,以便查看。 第一种 prototype 引用型原型继承 语言支持:js原生支持的...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • 面向对象的一些方法

    prototype和_proto_ 原型和原型链 每次new A()都会实例化一个新的A对象, prototype...

  • 原型和原型链

    _ proto_,隐式原型 对象特有(constructor)prototype 显式原型 函数特有 protot...

  • 继承

    原型链直接继承 原型链直接继承prototype 原型链继承_prototype属性 继承_构造函数绑定

网友评论

      本文标题:js原型继承_proto_、prototype总结

      本文链接:https://www.haomeiwen.com/subject/qtoleftx.html