美文网首页
JavaScript中对象的__proto__属性和protot

JavaScript中对象的__proto__属性和protot

作者: liutianou | 来源:发表于2018-11-07 17:48 被阅读0次

JS中每个对象都会有proto属性,d默认为Object,例如:
var a={};//这里对象a的proto属性就是Object>

proto属性的作用主要是用来确定当前对象的继承者,在当前对象找不到指定的属性和对象时,会去proto属性指定的对象中寻找,之后依次类推直到找完所有继承或找到要找的属性为止。

js的函数会有一个默认的prototype对象,这个prototype对象用来指定函数的继承关系,prototype对象默认有两个属性,一个是constructor,另一个就是proto属性,默认的prototype对象在被改变之前就像是这个函数用来表示自己的一个对象,其中proto属性和普通对象的proto属性一样用来对应继承关系,而constructor属性则代表了函数本身,举个例子:

//console下的结果
function a(){alert(1)}
a.prototype.constructor;//function a(){alert(1)}
var b={x:1}
a.prototype=b;//设置继承
var c=new a();
c.x//1

基本来说就是a继承了对象b中的属性或者方法。
最后说一下new的原理,用上面代码中提到的new来举例,new的过程是先生成一个空对象给c,然后把c的proto属性指向a的prototype对象,最后执行a.call(c)来构造对象c。总的来说由于对象c的继承指向了a的prototype对象也就是b,所以c能拿到b中的x属性,证明a和b的继承关系。

这里特别要说明一下,由于c的proto属性指向了a的prototype,所以c的constructor也变为a的prototype的constructor,这样会产生一些问题,因为原本可以向这样使用c()来实现a的方法,但现在由于a的prototype是b,所以a的constructor会变为b的constructor,这样调用就不会调用a方法而是调用b的constructor方法。所以必须执行一下代码来纠正这个问题。

a.prototype.constructor=a;//将a的原型的constructor属性改回原来的
或者可以这样写
c.constructor=a;//c在找不到constructor属性的时候会去proto找

c()就会依然调用原来的a方法,继承也不会受影响。当然,如果你就是要用prototype的constructor方法那就不需要修改了~~

相关文章

  • JavaScript中对象的__proto__属性和protot

    JS中每个对象都会有proto属性,d默认为Object,例如:var a={};//这里对象a的proto属性就...

  • js中的__proto__与prototype及原型链

    javascript中每个对象除了本身的属性外,还有一个__proto__属性,继承了父对象的方法和属性(形成原型...

  • Javascript 中的 __proto__ 和 protot

    在 JS 里,万物皆对象。方法(Function)是对象,方法的原型(Function.prototype)是对象...

  • javascript原型链图解

    javascript原型链图解函数对象及其 prototype 属性函数的所有实例中的__proto__属性都指向...

  • JavaScript面向对象技术

    在JS中,万物皆对象。Javascript中只有对象。每个对象都具有一个__proto__属性,称为隐式属性,它指...

  • JavaScript——面向对象(二)

    一、prototype 1、prototype属性的作用JavaScript的每个对象都继承“原型”(protot...

  • javaScript原型继承日记

    在 javaScript 中,'一切皆对象' ! 所有对象都有一个隐藏属性__proto__ 通过这个可以获取其对...

  • javascript 原型链图

    __proto__和 prototype __proto__是对象才有的属性prototype 是函数才有的属性

  • 小知识点集汇三

    小知识点集汇三 JavaScript 所有对象都有 __proto__ 属性,都指向创造对象的函数对象的 prot...

  • 原型

    每个对象都有一个__proto__属性,这个属性是用来标识自己所继承的原型。 指向继承的原型 JavaScript...

网友评论

      本文标题:JavaScript中对象的__proto__属性和protot

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