var arr = new Array(12,13,14,15,16,17,18); var arr2 = new Array(12,13); arr.sun=function(){
//用原型加Array.prototype.sun=function() 下面的alert(arr2.sun())生效,就不會出現說arr2沒有sun方法,這就好像css裏面的class給一組元素加樣式
//若是隻是arr.sun,就好像是行間樣式alert(arr2.sun())不會生效,由於他沒有想arr那樣加sun方法 var reun = null; for(var i=0;i<this.length;i++){ reun+=this[i] } return reun; } alert(arr.sun()) alert(arr2.sun())
// prototype函數纔有的屬性(prototype爲函數增長方法(共用)) __proto__對象纔有的屬性(因此函數也有這個__proto__只不過爲隱形的) // 最終他們是相等的 → console.log(__proto__===constructor.prototype) //ture var a = {} console.log(typeof a.prototype)//undefined console.log(a.__proto__)//對象集合 console.log(typeof a.__proto__) //object var b = function(){} console.log(typeof b.prototype)//object console.log(b.prototype)//b{} console.log(typeof b.__proto__)//function console.log(b.__proto__)//function(){} // 原型鏈 // 由於__proto__是任何對象都有的屬性 在js中萬物皆對象 因此會造成一個__proto__連起來的鏈條 遞歸訪問到最後 值爲空 var c = function(){} var d = new c() console.log(typeof d.__proto__) //object console.log(d.__proto__)//c() 構造器fucntion c的原型對象 console.log(typeof d.__proto__.__proto__)//object console.log(d.__proto__.__proto__)//object() 構造器fucntion object的原型對象 console.log(typeof d.__proto__.__proto__)//object console.log(d.__proto__.__proto__.__proto__)//null
全部對象都有隱形原型(__proto__)
let a = 123
console.log(a.__proto__)
console.log(''.__proto__) 以上都會打印出 該對象所擁有的方法