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