摘要:由于屬性是可以變更的,所以未必真的指向?qū)ο蟮臉?gòu)造函數(shù),只是一個(gè)提示。不過,從編程習(xí)慣上,我們應(yīng)該盡量讓對(duì)象的指向其構(gòu)造函數(shù),以維持這個(gè)慣例。
對(duì)象
在javascript中經(jīng)常聽到一句話叫做一切事物皆對(duì)象。
其實(shí)得除null和undefined除外 數(shù)字也有點(diǎn)特殊看栗子
false.toString();//"false" [1,2,3].toString();//"1,2,3" //數(shù)字 (1).toString();//"1" 1 .toString();// "1" 1..toString();// "1" 1.toString();//Unexpected token ILLEGAL //null undefined null.toString();//Cannot call method "toString" of null undefined.toString();//Cannot call method "toString" of undefined
數(shù)字應(yīng)該是js引擎解析出錯(cuò)
這里特別注意的是對(duì)象也分為普通對(duì)象和函數(shù)對(duì)象,函數(shù)對(duì)象就是通過new Function創(chuàng)建的對(duì)象普通對(duì)象就是Object后面講到原型時(shí)會(huì)用到。
var text1={}; var text2={name:"xx",age:"3"} //屬性的訪問 text2.name//xx text2[name]//undefined text2["name"]//xx
對(duì)象屬性的刪除只有delete,去設(shè)置它的值為null、和undefined 只是制空 方便gc回收屬性仍然存在。
var text={name:"xx",age:"3",say:"hello"} text.name=null; text.age=undefined; delete text.say; text;//{name:null,age:undefined}原型
概念:每當(dāng)定義個(gè)個(gè)對(duì)象的時(shí)候,對(duì)象中會(huì)包含一些預(yù)定義的屬性。其中函數(shù)對(duì)象的一個(gè)屬性就叫原型對(duì)象prototype。
普通對(duì)象是沒有prototyoe的,但有__proto__屬性。
作用:原型對(duì)象就是用來做繼承用的。
栗子:
var person=function(name){ this.name=name; } person.prototype.getName=function(){ return this.name; } var xx=new person("我叫xx"); xx.getName();//通過原型的屬性繼承了getName方法
至于怎么實(shí)現(xiàn)的就得說到原型鏈了。
原型鏈概念:JS在創(chuàng)建對(duì)象的時(shí)候不管是普通對(duì)象還是原型對(duì)象都有一個(gè)叫做__proto__的屬性,他用于指向那個(gè)創(chuàng)建它的對(duì)象的原型prototype。然而創(chuàng)建他的對(duì)象也有_proto_這個(gè)屬性,同樣又指向上一層,直到 __proto__這個(gè)屬性為null為止,這樣形成的一條鏈狀就叫原型鏈 。
newfunction person(){ } var p=new person(); alert(p.__proto__===person.prototype);//true
new的作用:
var p={};//聲明個(gè)空對(duì)象
p.__proto__=person.prototype;//把P__proto__的屬性指向person的原型
person.call(p);//把this的指針指向p
constructor概念:constructor這個(gè)屬性不會(huì)影響內(nèi)部的任何屬性。
只是JavaScript語言設(shè)計(jì)的歷史遺留物。由于constructor屬性是可以變更的,所以未必真的指向?qū)ο蟮臉?gòu)造函數(shù),只是一個(gè)提示。不過,從編程習(xí)慣上,我們應(yīng)該盡量讓對(duì)象的constructor指向其構(gòu)造函數(shù),以維持這個(gè)慣例。
總結(jié)下:說白了一個(gè)并沒什么太大用的東西!y很不靠譜!很費(fèi)操作!
理由看栗子1:
//定義構(gòu)造函數(shù) function person(name){ this.name=name; } //給他原型上添加個(gè)方法 person.prototype.say=function(){ console.log(this.name); } //測試下 var p=new person("xx"); alert(p.constructor)
這個(gè)栗子沒毛病他指向了構(gòu)造函數(shù)。
然后看栗子2:
//定義構(gòu)造函數(shù) function person(name){ this.name=name; } //給他原型上添加個(gè)方法 person.prototype={ say:function(){ console.log(this.name) } } //測試下 var p=new person("xx"); alert(p.constructor)
看吧很不靠譜除非你在去手動(dòng)的改它的值
來源:它就是通過原型鏈從Object.prototype那繼承過來的。
作用:用來判斷一個(gè)對(duì)象是否包含自定義屬性而不是原型鏈上的屬性
上栗子:
Object.prototype.one=1;//先定義一個(gè)原型屬性one var text={two:2,three:3};//那么所有的普通對(duì)象都繼承one console.log(text.one);//1 "one" in text;//true 他去找原型鏈上的屬性去了 text.hasOwnProperty("one");//false text.hasOwnProperty("two");//true text.hasOwnProperty("three");//true
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86571.html
摘要:對(duì)應(yīng)的關(guān)系圖如下講解了構(gòu)造函數(shù)和原型對(duì)象之間的關(guān)系,那么實(shí)例對(duì)象和原型對(duì)象之間的關(guān)系又是怎么樣的呢下面講解。原型對(duì)象的指向的是構(gòu)造函數(shù)和本身沒有屬性,但是其原型對(duì)象有該屬性,因此也能獲取到構(gòu)造函數(shù)。 JavaScript進(jìn)階 - 1. 原型和原型鏈的概念 我們好多經(jīng)常會(huì)被問道JavaScript原型和原型鏈的概念,還有關(guān)于繼承,new操作符相關(guān)的概念。本文就專門整理了原型和原型鏈的概念...
摘要:原文鏈接關(guān)于的原型和原型鏈,看我就夠了一參考鏈接闖關(guān)記之原型及原型鏈之原型與原型鏈一篇文章帶你理解原型和原型鏈徹底理解原型鏈一的默認(rèn)指向圖解和的三角關(guān)系原型和原型鏈三張圖搞懂的原型對(duì)象與原型鏈 溫故 創(chuàng)建對(duì)象的三種方式 通過對(duì)象直接量 通過new創(chuàng)建對(duì)象 通過Object.create() js中對(duì)象分為兩種 函數(shù)對(duì)象 普通對(duì)象 仔細(xì)觀察如下代碼 function Foo(na...
摘要:每個(gè)原型對(duì)象都有一個(gè)屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)為了驗(yàn)證這一說話,舉個(gè)例子。 本文共 1475 字,讀完只需 6 分鐘 一、概述 在 JavaScript 中,是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,但是 JS 本身是沒有 類 的概念,JS 是靠原型和原型鏈實(shí)現(xiàn)對(duì)象屬性的繼承。 在理解原型前,需要先知道對(duì)象的構(gòu)造函數(shù)是什么,構(gòu)造函數(shù)都有什么特點(diǎn)? 1. 構(gòu)造函數(shù) // 構(gòu)造函數(shù) Person() ...
摘要:我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系好了構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們?cè)趺幢硎緦?shí)例與實(shí)例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計(jì)面向?qū)ο笙到y(tǒng)的時(shí)候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因?yàn)闀r(shí)間匆忙,它設(shè)計(jì)起來相對(duì)簡單,而是因?yàn)閺囊婚_始B...
摘要:我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系好了構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們?cè)趺幢硎緦?shí)例與實(shí)例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計(jì)面向?qū)ο笙到y(tǒng)的時(shí)候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因?yàn)闀r(shí)間匆忙,它設(shè)計(jì)起來相對(duì)簡單,而是因?yàn)閺囊婚_始B...
閱讀 3164·2021-11-22 14:45
閱讀 3314·2019-08-29 13:11
閱讀 2316·2019-08-29 12:31
閱讀 935·2019-08-29 11:21
閱讀 3002·2019-08-29 11:09
閱讀 3628·2019-08-28 18:11
閱讀 1433·2019-08-26 13:58
閱讀 1286·2019-08-26 13:27