摘要:執(zhí)行構(gòu)造函數(shù)的一步說明對象可以通過函數(shù)來創(chuàng)建。是最頂級的構(gòu)造函數(shù),對象里面,就有好幾個其他屬性。構(gòu)造函數(shù)與普通函數(shù)并沒有區(qū)別,只是調(diào)用方式不同。
主要問題:
1、構(gòu)造函數(shù)和普通函數(shù)有區(qū)別么?什么區(qū)別?
2、prototype和__proto__有什么不同?
3、instanceof的作用機制,為什么有限制?
4、ES6的相關(guān)方法,Class繼承原理?
三、對象與原型
(一)、數(shù)據(jù)類型
Js共有6種數(shù)據(jù)類型:
5種基本數(shù)據(jù)類型 undefined,null,string,number,Boolean 1種復雜數(shù)據(jù)類型 Object
Object 數(shù)據(jù)類型可以分為兩種:
函數(shù)(包括各種原生、自定義的構(gòu)造函數(shù)): Object(),Function(),Array(),Date(),,, 對象實例(由函數(shù)創(chuàng)建的) {,,},[,,]...
(二)、創(chuàng)建對象
var Person = function () { }; var p = new Person();
很簡單的一段代碼,我們來看看這個new究竟做了什么?我們可以把new的過程拆分成以下三步:
<1> var p={}; 也就是說,初始化一個對象p。
<2> p.__proto__=Person.prototype;
<3> Person.call(p); 也就是說構(gòu)造p,也可以稱之為初始化p。//執(zhí)行構(gòu)造函數(shù)的一步
說明:對象可以通過函數(shù)來創(chuàng)建。對象都是通過函數(shù)創(chuàng)建的。
每個函數(shù)都有一個prototype屬性,指向一個對象,對象默認只有一個叫做constructor的屬性,指向這個函數(shù)本身。
Object是最頂級的構(gòu)造函數(shù),prototype對象里面,就有好幾個其他屬性。
每個對象都有一個__proto__,可成為隱式原型。
自定義函數(shù)的prototype本質(zhì)上就是普通對象實例,都是被Object創(chuàng)建,所以它的__proto__指向的就是Object.prototype。Object.prototype確實一個特例——它的__proto__指向的是null。
(三)、instanceof
function B(){}; var A = new B(); console.log(A instanceof B);
Instanceof運算符的第一個變量是一個對象,暫時稱為A;第二個變量一般是一個函數(shù),暫時稱為B。
Instanceof的判斷隊則是:沿著A的__proto__這條線來找,同時沿著B的prototype這條線來找,如果兩條線能找到同一個引用,即同一個對象,那么就返回true。如果找到終點還未重合,則返回false。
所以instanceof 無法檢測不同iframe創(chuàng)建的對象實例。
(四)、ES6新方法,新特性
Object.setPrototypeOf(),Object.getPrototypeOf()。新增加幾個方法直接操作對象的__proto__屬性,實現(xiàn)對象之間的聯(lián)系。
Class的對象語法糖,模仿面向?qū)ο蟮恼Z法,勉強提供了JS中的類的概念。然而并沒有改變原型鏈的實質(zhì),只是更加隱藏的更深。
(五)、繼承與委托
與純凈面向?qū)ο蟮恼Z言不同,JS本質(zhì)并沒有類和實例的概念。JS中一切皆對象(除了少數(shù)基本類型),是真正的面向“對象”。
構(gòu)造函數(shù)與普通函數(shù)并沒有區(qū)別,只是調(diào)用方式不同。
與竭力模仿面向?qū)ο蟮姆绞絹硎褂肑S,使得代碼繼承邏輯十分復雜抽象。
相比之下,使用委托的思想,直接修改對象的__proto__屬性指向,來訪問委托對象上的屬性和方法,在邏輯上更簡潔直觀。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107391.html
摘要:設(shè)計模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計模式必須要先搞懂面向?qū)ο缶幊?,否則只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學習總結(jié)。知識只有分享才有存在的意義。 是時候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:春招季如何橫掃面試核心考點基礎(chǔ)版前端面試之路二基礎(chǔ)整理的繼承和的繼承有什么區(qū)別的繼承時通過或構(gòu)造函數(shù)機制來實現(xiàn)。作用創(chuàng)建私有變量,減少全局變量,防止變量名污染。異步瀏覽器訪問服務(wù)器請求,用戶正常操作,瀏覽器后端進行請求。 春招季如何橫掃 Javascript 面試核心考點(基礎(chǔ)版)?前端面試之路二(javaScript基礎(chǔ)整理) ES5的繼承和ES6的繼承有什么區(qū)別 ES5的繼承時通過...
閱讀 1383·2023-04-26 00:35
閱讀 2757·2023-04-25 18:32
閱讀 3420·2021-11-24 11:14
閱讀 805·2021-11-22 15:24
閱讀 1450·2021-11-18 10:07
閱讀 6733·2021-09-22 10:57
閱讀 2809·2021-09-07 09:58
閱讀 3593·2019-08-30 15:54