原型链:每一个对象都有自己的原型,而原型也是对象,也有自己的原型,形成一个链式结构,称之为原型链。
1.怎么去理解原型链呢?
我的办法是把原型对象理解成一个母系氏族社会,原型对象(母)、构造函数(父)、实例对象(子):
实例对象(子)拥有的__proto__ 属性指向原型对母(母);
原型对象(母)拥有的(constructor)属性指向构造函数(父);
构造函数(父)拥有的(prototype)属性指向原型对象(母);
-
arr的对象原型链
//js通过原型链来实现继承的。 let arr = [1,2,3] //[]的底层= new Array(1,2,3) //查看arr的原型 console.log(arr.__proto__.constructor) // Array console.log(arr.__proto__===Array.prototype) // true //查看arr原型的原型 console.log(arr.__proto__.proto__.constructor) //找(父)object console.log(arr.__proto__.proto__ === object.prototype) // true
-
date的对象原型链
let d = new Date() //js中有少部分的对象,无法通过log来打印,一旦使用log打印会自动转成字符串显示:日期对象Date、函数对象function、DOM对象 //date 使用console.dir()打印原型 console.log(d.__proto__)
-
String的对象原型链
let str = 'abc' // = new String('abc') console.log(str) //打印string的原型 console.log(str.__proto__)
-
DOM的原型对象
<div class="di"></div> <p class="pp"></p> <script> let di = document.querySelector(".di") let pp = document.querySelectot(".pp") console.dir(di) </script>
-
函数的原型对象
// 1.函数也是对象类型,所以函数也有自己的原型链 // 2.js中所有的函数对象都是被function构造函数创建的。 //这两种写法本质都是调用 new Function()创建的 // 1.具名函数 function fn1(){ console.log('aaa') } fn1(); // 2.匿名函数 let fn2 = function(a,b){ return a+b } let res = fn2(1,2) console.log(res)
另:js是通过原型实现继承的。
记录一下。