摘要:這種方法也存在這樣的問題如果修改了構(gòu)造函數(shù)的原型對(duì)象,之前創(chuàng)建的對(duì)象無法通過這種方式來確定類型修改構(gòu)造函數(shù)的原型對(duì)象會(huì)導(dǎo)致之前創(chuàng)建的對(duì)象無法通過這種方式判斷類型判斷對(duì)象繼承自哪些父類型使用使用
判斷對(duì)象類型的方法 使用原型對(duì)象上的constructor屬性來判斷
注意:對(duì)象沒有constructor屬性(除非自己添加),constructor屬性是放在原型對(duì)象上的(通過原型鏈訪問到)
function Person(){ } var person = new Person(); person.constructor === Person // true person.constructor === Object // false var object = {a:1,b:2} object.constructor === Object // true
如果重寫了函數(shù)的原型對(duì)象,則有可能無法使用這個(gè)方法
function Person(){ } Person.prototype = { } var p1 = new Person() p1.constructor === Person //false
如果希望可以使用這種方法,則可以給新的原型對(duì)象設(shè)置constructor屬性
function Person(){ } Person.prototype = { constructor: Person } var p1 = new Person() p1.constructor === Person // true
使用constructor屬性來判斷對(duì)象類型(結(jié)合上面最后的方法)的優(yōu)點(diǎn)是:無論如何修改構(gòu)造函數(shù)的原型對(duì)象,之前創(chuàng)建的對(duì)象的constructor屬性一定指向構(gòu)造函數(shù),因此一定可以判斷出他們的類型
使用instanceof 運(yùn)算符instanceof運(yùn)算符用來測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的原型對(duì)象(通俗的講就是判斷一個(gè)對(duì)象的原型鏈上是否存在一個(gè)構(gòu)造函數(shù)的原型對(duì)象)
function Person(){ } var person = new Person(); person instanceof Person // true person instanceof Object // true var object = {a:1,b:2} object instanceof Object // true
注意:如果重寫了構(gòu)造函數(shù)的原型對(duì)象,則會(huì)出現(xiàn)無法判斷(之前創(chuàng)建的)對(duì)象是否屬于該類型: 因?yàn)橹貙懥藰?gòu)造函數(shù)的原型對(duì)象,而(之前創(chuàng)建的)對(duì)象的原型鏈中仍然是之前構(gòu)造函數(shù)的原型對(duì)象
function Person(){ } var p1 = new Person() p1 instanceof Person // true Person.prototype = { name: "aaa", age: "20" } // p1是修改構(gòu)造函數(shù)原型對(duì)象之前創(chuàng)建的對(duì)象 // p1的__proto__仍然指向原來的原型對(duì)象 p1 instanceof Person // false // p2是修改構(gòu)造函數(shù)原型對(duì)象之后創(chuàng)建的對(duì)象 var p2 = new Person() p2 instanceof Person // true使用Object.getPrototypeOf()方法
Object.getPrototypeof()可以獲取對(duì)象的原型。這種方法也存在這樣的問題:如果修改了構(gòu)造函數(shù)的原型對(duì)象,之前創(chuàng)建的對(duì)象無法通過這種方式來確定類型
function Person(){ } var p1 = new Person() Object.getPrototypeOf(p1) === Person.prototype // true Object.getPrototypeOf(p1) === Object.prototype // false Person.prototype = { name: "aaa", age: "20" } // p1是修改構(gòu)造函數(shù)原型對(duì)象之前創(chuàng)建的對(duì)象 // p1的__proto__仍然指向原來的原型對(duì)象 Object.getPrototypeOf(p1) === Person.prototype // false // p2是修改構(gòu)造函數(shù)原型對(duì)象之后創(chuàng)建的對(duì)象 var p2 = new Person() Object.getPrototypeOf(p2) === Person.prototype // true使用isPrototypeOf()方法
isPrototypeOf()方法可以判斷一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上。這種方法也存在這樣的問題:如果修改了構(gòu)造函數(shù)的原型對(duì)象,之前創(chuàng)建的對(duì)象無法通過這種方式來確定類型
function Person(){ } var p1 = new Person() Person.prototype.isPrototypeOf(p1) // true Object.prototype.isPrototypeOf(p1) //true Person.prototype = { } Person.prototype.isPrototypeOf(p1) // false Object.prototype.isPrototypeOf(p1) //true var p2 = new Person() Person.prototype.isPrototypeOf(p2) // true Object.prototype.isPrototypeOf(p2) //true
修改構(gòu)造函數(shù)的原型對(duì)象會(huì)導(dǎo)致之前創(chuàng)建的對(duì)象無法通過這種方式判斷類型
判斷對(duì)象繼承自哪些父類型 使用instanceofinstance instanceof Object //true instance instanceof SuperType // true instance instanceof SubType //true使用isPrototypeOf
Object.prototype.isPrototypeOf(instance) // true SuperType.prototype.isPrototypeOf(instance) // true SubType.prototype.isPrototypeOf(instance) // true
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/83388.html
摘要:繼承原型鏈原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法。臨時(shí)的構(gòu)造函數(shù)將傳入的對(duì)象作為這個(gè)構(gòu)造函數(shù)的原型返回新實(shí)例以為原型創(chuàng)建一個(gè)新實(shí)例不僅屬于所有,而且也會(huì)被共享。上訴例子只調(diào)用了一次構(gòu)造函數(shù),因此避免了在上面創(chuàng)建不必要的多余的屬性。 繼承 1 原型鏈 原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法。其基本思想是利用原型讓一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法。 構(gòu)造函數(shù)、原型和實(shí)例的關(guān)系 每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)...
摘要:原型對(duì)象的問題省略了為構(gòu)造函數(shù)傳遞參數(shù),導(dǎo)致了所有實(shí)例在默認(rèn)情況下都取得相同的屬性值。即使有其他代碼會(huì)給這個(gè)對(duì)象添加方法或數(shù)據(jù)成員,但也不可能有別的方法訪問傳入到構(gòu)造函數(shù)中的原始數(shù)據(jù)。 創(chuàng)建對(duì)象 1.Object構(gòu)造函數(shù) 創(chuàng)建一個(gè)Object的實(shí)例,然為其添加屬性和方法(早期創(chuàng)建對(duì)象的模式) var person = new Object(); person.name = Nichol...
摘要:私有變量任何在函數(shù)中定義的變量,都可以認(rèn)為是私有變量,因?yàn)樵诓荒茉俸瘮?shù)的外部訪問這些變量。我們把有權(quán)訪問私有變量和私有函數(shù)的公有方法稱為特權(quán)方法。模塊模式模塊模式是為單例創(chuàng)建私有變量和特權(quán)方法。 私有變量 任何在函數(shù)中定義的變量,都可以認(rèn)為是私有變量,因?yàn)樵诓荒茉俸瘮?shù)的外部訪問這些變量。私有變量包括函數(shù)的參數(shù)、函數(shù)中定義的變量和函數(shù)。我們把有權(quán)訪問私有變量和私有函數(shù)的公有方法稱為特權(quán)方...
摘要:面向?qū)ο笏季S方式將復(fù)雜的問題簡(jiǎn)單化。給對(duì)象起個(gè)名字。是類類型的變量。通過已有的對(duì)象調(diào)用該對(duì)象的功能。格式對(duì)象對(duì)象成員可以該對(duì)象的屬性賦值。這時(shí)會(huì)有兩個(gè)引用同時(shí)指向堆中的同一個(gè)對(duì)象。對(duì)象,用于描述現(xiàn)實(shí)中的個(gè)體,它是類的實(shí)例。 01面向?qū)ο蠛兔嫦蜻^程的思想 * A: 面向過程與面向?qū)ο蠖际俏覀兙幊讨校帉懗绦虻囊环N思維方式 * a: 面向過程的程序設(shè)計(jì)方式,是遇到一件事時(shí),思考我該...
摘要:首先導(dǎo)包依賴如下構(gòu)建應(yīng)用是以為中心的實(shí)例可以通過獲得其中是工廠接口任務(wù)用于創(chuàng)建配置文件將會(huì)解析配置文件在類對(duì)象中配置獲取數(shù)據(jù)源事務(wù)管理器映射器在文件下新建文件配置文件內(nèi)容如下定義別名定義數(shù)據(jù)庫信息事物管理 首先導(dǎo)包 依賴如下 mysql mysql-connector-java 8.0.15 org.m...
閱讀 1666·2021-09-28 09:35
閱讀 1137·2019-08-30 15:54
閱讀 1664·2019-08-30 15:44
閱讀 3369·2019-08-30 14:09
閱讀 498·2019-08-29 14:05
閱讀 2667·2019-08-28 17:53
閱讀 1988·2019-08-26 13:41
閱讀 1719·2019-08-26 13:26