JS的原型理解

作者: klmhly | 来源:发表于2019-06-04 20:52 被阅读0次

js的原型系统,主要包含以下三个基本元素

一、属性

  1. prototype
  2. __ proto __
  3. constructor

二、理解那三个概念的基础

1. js函数对象
有不同类型的函数对象,例如下面的
function Function { [native code } | [Function:Function]
function Object { [native code } | [Function:Object]
function Array { [native code } | [Function:Array]
function String { [native code } | [Function:String] //基本包装对象
function Number { [native code } | [Function:Nuber]
function Boolean { [native code } | [Function:Boolean]
function Person { [native code } | [Function:Person] //自定义的构造函数

2. 以上函数对象的初始化默认值
[Function]
{}
[]
[String:'' ]
[Number:0 ]
[Boolean:false ]
Person {}

三、原则

1. 只有函数对象有prototype属性,并且函数对象的prptotype属性的返回值是二(2)里面定义的初始化值

2. 变量的__ proto __属性返回的是它的构造函数的原型对象

3. 变量的constructor属性返回的是它的构造函数,(也就是二(1)里面的)

要牢记上述三条原则,基本上贯穿了整个原型系统

四、示例

1. constructor

constructor就是返回对象的构造函数,一定是函数,只是划分了类型

// 因为二(1)讲到Array, Object,Function,Number。。。都是函数对象,所以它们的构造函数都是一样的Function
Array.constructor = [Function:Function]
Object.constructor = [Function:Function]
Function.constructor = [Function:Function]
Number.constructor = [Function:Function]
Person.constructor = [Function:Function]
[1,2,3].constructor = [Function:Array] 数组构造函数
'123'.constructor = [Function:String] 字符串构造函数
1.constructor = [Function:Number]
false.constructor = [Function:Boolean]
p1.constructor = [Function:Person]

2. prototype

prototype返回的是函数对象的类型标识,只有函数对象

Function.prototype = [Function]
Object.prototype ={}
Array.prototype = []
Person.prototype = Person {}
Student.prototype = Student {} /student继承Person
String.prototype = [String:'']
Boolean.prototype = [Boolean:false]
Number.prototype =[Number:0]

3. __ proto __

对象的proto = 该对象构造函数.prototype
[1,2,3].__proto__ = []
89.__proto__ = [Number:0]
true.__proto__ = [Boolean:false]
{a:1}.__proto__ = {}
p1.__proto__ = Person{}
Number.__proto__ = [Function]
Object.__proto__ = [Function]
String.__proto__ = [Function]
Person.__proto__ = [Function]

五、原型链

通过 __proto__链起来的一条链

123.__proto__ = [Number:0] //(它是一个对象:Number.prototype)
123.__proto__ .__proto__= {}(第二层Object.prototype)
123.__proto__ .__proto__.__proto__= null(第三层:{}空对象的原型是null)

所有的原型链最终都是null
Object:{}->null
[1,2,3]:[] -> {} -> null
'123':[String:''] ->{} ->null
false:[Boolean:false] ->{} -null
29:[Number:0] -> {} ->null
Person,Number:[Function]->{}->null

相关文章

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • JS原型

    最近一直在理解JS的原型------《你不知道的JS》--------《JS设计模式》 里面都讲JS的原型运作方式...

  • 前端资料

    ES6新数据类型 Symbol . js变量提升函数提升 js this js 原型及原型链理解 new做了什么 ...

  • 原型与新版的类-class

    首先来理解原型原型 === 共用属性可以先看看方姐的几篇文章:什么是JS原型链JS 中 proto 和 proto...

  • JS原型理解

    示例: ​总结如下:无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个 prototype...

  • JS原型理解

    原型链是整个JS面向对象的基础在理解原型链之前先来谈谈JS创建对象的几种方式 可以看到输出了4个对象,a1和a2看...

  • 2018-01-09 关于javascript原型链的思考 pl

    s 深入理解原型和原型链? 构造函数 理解原型和原型链 new的时候js都干了什么? 一个实现继承的demo 构造...

  • js原型链--js面向对象编程

    简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢...

  • JS的原型理解

    js的原型系统,主要包含以下三个基本元素 一、属性 prototype __ proto __ construct...

  • js原型-原型链理解

    1、prototype function Person(){ };Person.prototype.name = ...

网友评论

    本文标题:JS的原型理解

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