ProtoType原型和__Proto__原型鏈的詳解

   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__) 以上都會打印出 該對象所擁有的方法
相關文章
相關標籤/搜索