国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

20170607-面向?qū)ο?3-判斷對(duì)象類型的方法

zhoutao / 1921人閱讀

摘要:這種方法也存在這樣的問題如果修改了構(gòu)造函數(shù)的原型對(duì)象,之前創(chuàng)建的對(duì)象無法通過這種方式來確定類型修改構(gòu)造函數(shù)的原型對(duì)象會(huì)導(dǎo)致之前創(chuàng)建的對(duì)象無法通過這種方式判斷類型判斷對(duì)象繼承自哪些父類型使用使用

判斷對(duì)象類型的方法 使用原型對(duì)象上的constructor屬性來判斷
每個(gè)對(duì)象的原型上都有一個(gè)constructor屬性,指向了其構(gòu)造函數(shù)

注意:對(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ì)象繼承自哪些父類型 使用instanceof
instance 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

相關(guān)文章

  • 20170607-面向對(duì)象02-繼承

    摘要:繼承原型鏈原型鏈?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ì)...

    lushan 評(píng)論0 收藏0
  • 20170607-面向對(duì)象01-創(chuàng)建對(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...

    NusterCache 評(píng)論0 收藏0
  • 20170607-私有變量

    摘要:私有變量任何在函數(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)方...

    trilever 評(píng)論0 收藏0
  • 1、面向對(duì)象 2、類與對(duì)象 3、局部變量和成員變量關(guān)系 4、封裝思想 5、private,this

    摘要:面向?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í),思考我該...

    dreamtecher 評(píng)論0 收藏0
  • mybatis 入門搭建

    摘要:首先導(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...

    enali 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

zhoutao

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<