摘要:一創(chuàng)建對(duì)象有幾種方法第一種方式字面量,默認(rèn)創(chuàng)建對(duì)象第二種方式構(gòu)造函數(shù)第三種方式之后輸入能得到二實(shí)例構(gòu)造函數(shù)原型原型鏈實(shí)例對(duì)象就是一個(gè)實(shí)例,就有屬性。通過把原型對(duì)象和構(gòu)造函數(shù)關(guān)聯(lián)。四運(yùn)算符構(gòu)造函數(shù)運(yùn)算符的工作原理最后返回的結(jié)果完全等同。
一、創(chuàng)建對(duì)象有幾種方法
// 第一種方式:字面量,默認(rèn)創(chuàng)建對(duì)象 var a10 = {name:"a10"}; // {name: "a10"} var a11 = new Object({name:"a11"}); // {name: "a11"} // 第二種方式:構(gòu)造函數(shù) var a2 = function(){this.name = "a20"}; var a20 = new a2(); // a2 {name: "a20"} // 第三種方式:Object.create() var a3 = {name:"a30"}; var a30 = Object.create(a3); // {} 之后輸入 a30.name 能得到 "a30"二、實(shí)例、構(gòu)造函數(shù)、原型、原型鏈 2.1 實(shí)例
對(duì)象就是一個(gè)實(shí)例,就有 _proto_ 屬性。
實(shí)例通過 _proto_ 原型鏈找到 prototype 原型對(duì)象,prototype 原型對(duì)象的屬性被所有實(shí)例共享。
2.2 構(gòu)造函數(shù)通過 new 來創(chuàng)建對(duì)象實(shí)例。
任何函數(shù)都可以作為構(gòu)造函數(shù)。
只要被new運(yùn)算符使用過的函數(shù)就是一個(gè)構(gòu)造函數(shù)。
2.3 原型函數(shù)都有 prototype 屬性,prototype 屬性的值就是一個(gè)初始化的原型對(duì)象。
原型對(duì)象有個(gè) constructor 和 _proto_ 屬性,constructor 是一個(gè)構(gòu)造函數(shù)。
Fn.prototype.constructor === Fn (constructor 函數(shù)指向構(gòu)造函數(shù)本身。通過 constructor 把原型對(duì)象和構(gòu)造函數(shù)關(guān)聯(lián)。)
2.4 原型鏈每一個(gè)對(duì)象都有自己的原型對(duì)象,原型對(duì)象本身也是對(duì)象,原型對(duì)象也有自己的原型對(duì)象,這樣就形成了一個(gè)鏈?zhǔn)浇Y(jié)構(gòu),叫做原型鏈。
三、instanceof的原理
instanceof 主要作用就是判斷一個(gè)實(shí)例是否屬于某種類型,實(shí)現(xiàn)原理就是只要右邊變量的 prototype 在左邊變量的原型鏈上即可。因此,instanceof 在查找的過程中會(huì)遍歷左邊變量的原型鏈,直到找到右邊變量的 prototype,如果查找失敗,則會(huì)返回 false。
// 構(gòu)造函數(shù) var Fn = function(name) { this.name = name; } var obj = new Fn("obj");
new 運(yùn)算符的工作原理:
var newTest = function(fn) { var initObj = Object.create(fn.prototype); var obj = fn.call(initObj); if(typeof obj === "object") { return obj; } else { return initObj; } } var Fn = function() { // this.name = "obj", 最后newTest(Fn)返回的結(jié)果完全等同。 return { name: "obj"; } } newTest(Fn)
原文地址:https://www.artroy.com.cn/art...
更多文章分享:https://www.artroy.com.cn/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/106412.html
摘要:不理解沒關(guān)系,下面會(huì)結(jié)合圖例分析上一篇高級(jí)程序設(shè)計(jì)筆記創(chuàng)建對(duì)象下一篇高級(jí)程序設(shè)計(jì)筆記繼承參考之原型鏈的解讀三張圖搞懂的原型對(duì)象與原型鏈繼承與原型鏈 文章直接從原型圖解開始的,如果對(duì)一些概念不太清除,可以結(jié)合后面幾節(jié)查看 1. 圖解原型鏈 1.1 鐵三角關(guān)系(重點(diǎn)) function Person() {}; var p = new Person(); showImg(https://s...
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...
摘要:探索是如何判斷的表達(dá)式如果函數(shù)的顯式原型對(duì)象在對(duì)象的隱式原型鏈上,返回,否則返回是通過自己產(chǎn)生的實(shí)例案例案例重要注意的顯示原型和隱式原型是一樣的。面試題測(cè)試題測(cè)試題報(bào)錯(cuò)對(duì)照下圖理解 原型與原型鏈深入理解(圖解) 原型(prototype) 函數(shù)的 prototype 屬性(圖) 每個(gè)函數(shù)都有一個(gè)prototype屬性,它默認(rèn)指向一個(gè)Object空對(duì)象(即稱為:原型對(duì)象) 原型對(duì)象中有...
摘要:原型鏈和對(duì)象的原型是對(duì)象實(shí)例和它的構(gòu)造函數(shù)之間建立的鏈接,它的值是構(gòu)造函數(shù)的。對(duì)象的原型根據(jù)上文提到的構(gòu)造調(diào)用函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)新對(duì)象,自動(dòng)將的原型指向構(gòu)造函數(shù)的對(duì)象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內(nèi)容,不少初學(xué)者甚至有一定經(jīng)驗(yàn)的老鳥都不一定能完全說清...
摘要:因?yàn)檫@造成了繼承鏈的紊亂,因?yàn)榈膶?shí)例是由構(gòu)造函數(shù)創(chuàng)建的,現(xiàn)在其屬性卻指向了為了避免這一現(xiàn)象,就必須在替換對(duì)象之后,為新的對(duì)象加上屬性,使其指向原來的構(gòu)造函數(shù)。這個(gè)函數(shù)接收兩個(gè)參數(shù)子類型構(gòu)造函數(shù)和超類型構(gòu)造函數(shù)。 最近一直在研究js面向?qū)ο螅玩溊^承是一個(gè)難點(diǎn),下面是我對(duì)繼承的理解以下文章借鑒自CSDN季詩筱的博客 原型鏈繼承的基本概念: ES中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)...
閱讀 2530·2021-11-17 09:33
閱讀 832·2021-11-04 16:13
閱讀 1388·2021-10-14 09:50
閱讀 742·2019-08-30 15:53
閱讀 3726·2019-08-30 14:18
閱讀 3319·2019-08-30 14:14
閱讀 2157·2019-08-30 12:46
閱讀 3234·2019-08-26 14:05