原型鏈: 是整個(gè)面向?qū)ο蟮幕A(chǔ)
- 創(chuàng)建對(duì)象有幾種方法:
var o1 = {name:'o1'}
var o11 = new Object({name:'o11'});
var M = function(){this.name = 'o2'};
var o2 = new M()
var P = {name:'o3'};
var o3 = Object.create(P)
- 原型、構(gòu)造函數(shù)、實(shí)例、原型鏈:(這塊的演示可以用M來進(jìn)行演示一波原型、構(gòu)造函數(shù)、實(shí)例之間的關(guān)系)
在控制臺(tái)輸入o2(實(shí)例)、M(構(gòu)造函數(shù))、M.prototype(原型對(duì)象)、M.prototype.constructor === M(判斷M的原型對(duì)象的constructor是否嚴(yán)格等于M)、
o2.__proto__ === M.prototype()
- 構(gòu)造函數(shù): 凡是通過new操作后面的函數(shù),這個(gè)函數(shù)就不是普通的函數(shù),即使里面沒有name,任何一個(gè)函數(shù)只要被new使用了就叫構(gòu)造函數(shù)。 (構(gòu)造函數(shù)是可以使用new運(yùn)算符生成實(shí)例)
構(gòu)造函數(shù)和原型對(duì)象的關(guān)系:
- 函數(shù)都有一個(gè)prototype屬性,這是在聲明一個(gè)函數(shù)的時(shí)候js自動(dòng)給它添加prototype屬性,prototype指的就是原型對(duì)象;
- 原型對(duì)象會(huì)以constructor(構(gòu)造器)來區(qū)分是被哪個(gè)構(gòu)造函數(shù)引用;
- 實(shí)例: 上面的o1、o11、o2就是實(shí)例
- 原型鏈: 實(shí)例通過prototype和proto往上查找相關(guān)聯(lián)的對(duì)象直到object.prototype的過程為原型鏈。 (工作原理:通過原型鏈的方式找到原型對(duì)象,原型對(duì)象的方法被不同的實(shí)例所共有的為原型鏈的工作原理)
- instanceof的原理: 判斷實(shí)例對(duì)象的proto和生成該實(shí)例的構(gòu)造函數(shù)的prototype是不是引用的同一個(gè)地址
如果此文對(duì)你有用請(qǐng)動(dòng)動(dòng)你的小手點(diǎn)個(gè)贊!謝謝!?。?/em>