1任何對象都有__proto__屬性 屬性值Object2並不是所有對象都有prototype屬性。只有方法對象(構造函數)以及基本數據類型還有Array,有prototype屬性;並且所有方法(對象)的prototype屬性都是object 在網上有很多關於原型的講解。在這裡我用console.l
1任何對象都有__proto__屬性 屬性值Object
2並不是所有對象都有prototype屬性。只有方法對象(構造函數)以及基本數據類型還有Array,有prototype屬性;並且所有方法(對象)的prototype屬性都是object
在網上有很多關於原型的講解。在這裡我用console.log()的方式給大家呈現。
1 //一、基本數據類型的原型 2 //console.log(String) String() 這時我們可以把它理解為構造函數 3 4 //console.log(typeof String) function 5 6 7 //console.log(String.prototype) String {} 8 9 //console.log(typeof String.prototype) object 說明String的prototype屬性是一個object對象,既然是對象我們就可以給他添加屬性或者方法。 10 11 String.prototype.cf=function(n){ //給String.prototype這個obj添加方法cf,字元串乘法 12 return new Array(n+1).join(this) 13 } 14 var str="cmf" 15 //console.log(str.cf(10)) cmfcmfcmfcmfcmfcmfcmfcmfcmfcmf 16 17 //console.log(String.prototype) String { cf=function()} String的原型是一個對象(obj)它有cf屬性,這個屬性對應著一個方法。 18 19 //二、構造函數的原型 20 function Info(m,n){ //構造函數 21 this.m=m 22 this.n=n 23 this.mn=m+"|"+n 24 } 25 //var 什麼東西前面可以加var 基本數據類型(String Number true underfind) 或者 obj(null function Array) 26 27 //var info=new Info('cmf','man') 28 //console.log(typeof info) object 通過構造函數實例化出來的都是obj 29 //console.log(info) // info { m="cmf", n="man", mn="cmf|man"} 30 31 //console.log(typeof Info) //function 前面說過方法對象(構造函數)有prototype屬性 32 33 //console.log(Info.prototype) // Info {} 34 //console.log(typeof Info.prototype) //object Info.prototype屬性是一個對象,是對象我們就給可以給他定義方法或者屬性。 35 36 //給構造函數原型(obj)定義方法(屬性) 37 Info.prototype.name=function(){ 38 return this.m+'name' 39 } 40 Info.prototype.age='18' 41 42 var info2=new Info('cmf','man') //實例化 43 44 45 /* 46 age:"18"在原型上 47 m:"cmf" 48 console.log(info2) mn:"cmf|man" 49 n:"man" 50 name:function()在原型上 51 */ 52 //console.log(info.name()) 53 //三 為什麼只有 方法對象以及基本數據類型有prototype屬性,它們兩有什麼相似的地方 54 //第一個問題我不知道 55 //第二個問題 56 var str1=new String('adq') 57 var str2='xhb' 58 var str3='adq' 59 var arry=new Array(1) 60 var arry2=new Array(2) 61 /* 62 console.log(typeof str1) //object 63 console.log(typeof str2) //string 64 console.log(str1.cf(8)) //adqadqadqadqadqadqadqadq 65 console.log(str2.cf(8)) //xhbxhbxhbxhbxhbxhbxhbxhb 66 67 console.log(str1==str3) //true 68 console.log(str1===str3) //false 69 70 怎麼理解呢 我們把所有的東西都理解為obj。基本數據類型理解為一個特殊的obj。
把上面的代碼自己console.log一遍應該有體會了。