资讯专栏INFORMATION COLUMN

__proto__(隐式原型)与prototype(显式原型)

plus2047 / 1474人阅读

摘要:最近了解了一下与简单的说它就是一个属性且属性的值为地址,指向一个对象。而它通常为函数的属性。那指向谁呢构造函数是的实例所以的判断沿着原型链不断的向上查找分别判断是否与相等

最近了解了一下__proto__与prototype:
prototype
1.简单的说它就是一个属性且属性的值为地址,指向一个对象。
而它通常为函数的属性。
2.它主要用来共享属性和方法(常用于构造函数创建实例对象给实例对象共享属性)
3.主要用来被访问
4.判断自有属性和原型属性 一般用hasOwnProperty()

function Person(name){
    this.name = name;
}
typeof(Person.prototype) //"object"
Person.prototype.publicData = "test"
Person.privateData = "test1"
Person.hasOwnProperty("privateData") //true
Person.hasOwnProperty("publicData") //false
var bob = new Person("bob")
var mary = new Person("mary") //bob和mary共享publicData属性

__proto__:
1.基本所有的对象有该属性
2.用来构建原型链访问构造方法中的显示原型

如何访问?

var arr = new Array()
arr.__proto__ === Array.prototype //true
arr.push(1)
arr.hasOwnProperty("push")//false
"push" in arr//true

以上代码:Array是arr的构造函数,arr的隐式原型指向Array的显示原型,arr中并无push的方法,却能调用到push这个方法
这里的push方法调用的是Array.prototype中的方法
理论上原型链可以无限长

function Foo(){}
function Bar(){}
Foo.prototype = new Bar()

此时Foo继承了Bar: Foo的实例在访问原型链的时候先访问Foo的显示原型在访问Bar的显示原型

Foo.prototype = {}

当然我们可以手动修改Foo的继承,以上两种方法重写了Foo.prototype,所以Foo.prototype.constructor也跟着改变了。

那Foo.__proto__指向谁呢? 构造函数是Function的实例 所以Foo.__proto__ === Function.prototype

instanceof的判断:

function Foo(){}
Foo instanceof Function
Foo.__proto__.__proto__ ..... === Function.prototype? 

Foo沿着原型链不断的向上查找 分别判断是否与Function.prototype相等

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94053.html

相关文章

  • 这样理解原型原型链比较简单

    摘要:属性这是每个对象都有的隐式原型属性,指向了创建该对象的构造函数的原型。 原型 在JavaScript中,有两个原型,分别是 prototype 和 _proto_注:在ECMA-262第5版中管这个 _proto_ 叫 [[Prototype]] prototype 属性:这是一个显式原型属性,只有函数才拥有该属性。_proto_ 属性:这是每个对象都有的隐式原型属性,指向了创建该对象...

    csRyan 评论0 收藏0
  • javascript 之 prototype__proto__

    摘要:首先,先介绍一个今天的主角隐式原型与显式原型什么是和显式原型在每一个函数请注意是函数创建之后都会有一个叫的属性,这个属性指向的是函数的原型对象。最后总结一下对象有属性指向该对象的构造函数的原型对象。 首先,先介绍一个今天的主角:proto(隐式原型)与prototype(显式原型) 什么是__proto__和prototype? prototype(显式原型)在每一个函数(请注意是函数...

    WrBug 评论0 收藏0
  • JS 中的 __proto__ prototype

    摘要:在这篇文章中,他介绍了一种实现继承的方法,这种方法并没有使用严格意义上的构造函数。的左值一般是一个对象,右值一般是一个构造函数,用来判断左值是否是右值的实例。 __proto__ 探究 __proto__隐式原型与prototype显式原型是个容易令人混淆的概念,简而言之prototype是构造函数用来被自己的实例继承的原型,而_proto_是实例用来继承父类原型的载体。 1. 是什么...

    Donald 评论0 收藏0
  • 弄清原型原型

    摘要:四条大规则原型和原型链,大体可以用以下几条规则概括,弄清楚了这几条,也就基本吃透了原型和原型链。上图帮助理解吧实例的隐式原型属性指向其构造函数的显式原型属性。原型相关方法判断一个对象是否在原型链上可以用,判断某一个属性是否是自身属性可以用。 四条大规则 原型和原型链,大体可以用以下几条规则概括,弄清楚了这几条,也就基本吃透了原型和原型链。 所有的引用类型都有一个__proto__属性...

    enda 评论0 收藏0
  • js基础(二):构造函数原型(看完必懂)

    摘要:写在最前构造函数和原型模式的使用场景很广泛,但因为对概念的混淆不清导致无法熟练掌握。换句话说,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中,比如下面的方法。 写在最前:构造函数和原型模式的使用场景很广泛,但因为对概念的混淆不清导致无法熟练掌握。切图带你从代码和流程图一步步攻克,纯干货,建议收藏详看,原型模式理解图非常重要,务必多看几遍! 前往查看demo源...

    BDEEFE 评论0 收藏0

发表评论

0条评论

plus2047

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<