1. 程式人生 > >2.9 原型鏈綜合復習參考

2.9 原型鏈綜合復習參考

指向 私有屬性 bsp 數組 私有 getx var func nbsp

1.div,a,window,document 瀏覽器輸出看一下內置的方法有哪些

  function Fn () {

    this.x = 100;

    this.y = 200;

    // 在類的函數體中寫的this.xxx = xxx都是給當前類的實例增加私有的屬性或者方法

  }

  // 在類的原型上寫的,都是給當前類的實例或者當前類,增加的公有的屬性和方法

  Fn.prototype.getX = function() {

    console.log(this.x)

  }

  Fn.prototype.getY = function () {

    console.log(this.y)

  }

  var f = new Fn;

  var f2 = new Fn;

2.所有的函數數據類型(普通函數和類)都天生自帶一個屬性:prototype,它存儲的值是一個對象數據類型的值,瀏覽器默認為其開辟一個堆內存

在瀏覽器給prototype默認開辟的堆內存上有一個默認的屬性:constructor,指向當前類本身

 每一個對象數據類型(普通對象,數組,正則,實例,prototype)都天生自帶一個屬性,__proto__,指向當前實例所屬類的原型

  function Fn () {

    this.x = 100;

    this.getX = function () {

      console.log(this.x)

    }

  }

  Fn.prototype.getX = function() {

    console.log(this.x)

  }

  Fn.prototype.setX = function (n) {

    this.x = n

  }

  var f1 = new Fn;

  f1.getX() // this->f1, console.log(f1.x) 100

  f1.__proto__.getX() // this->f1.__proto__,console.log(f1.__proto__.x) undefined

  Fn.prototype.setX(300) // this ->Fn.prototype, Fn.prototype.x= 300

  f1.getX() // 100

  f1.__proto__.getX() // 300

  f1.setX(); //this -> f1,f1.x = 500 把私有的修改為500

  f1.y = 300 // 給f1本身增加一個私有屬性和f2沒有關系

  f1.__proto__.y = 1000 // 在原型上增加一個y = 1000,f2也可以獲取到這個值了

3.在內置類的原型上擴展方法

  var ary= [12,23,34]

  ary.pop() // this->ary

  ary.__proto__.pop() // this->ary.__proto__ ->Array.prototype

2.9 原型鏈綜合復習參考