Object的prototype使用對構造函數的影響

JS中的Object有一個屬性prototype 即原型函數

除了 var obj = Object.create(null);  這樣的方式建立的對象沒有prototypethis

在咱們使用構造函數時,prototype經常會混淆,不容易分辨prototype

經常使用的OO模式(面向對象)對象

function Parent(name){原型

  this.name = name;io

}console

Parent.prototype.say = function(){function

  return "Your name is " + this.name;構造函數

}call

function Child(name){

  Parent.call(this,name);

}

Child.prototype = Object.create(Parent.prototype);

Child.prototype.greet = function(){

  console.log("Hello,"+this.say()+".");

}

var f1 = new Child("nana");

var f2 = new Child("bobo");

f1.greet();

f2.greet();

這種經典的OO模式,有不少prototype,很容易就迷失方向了,超級思惟邏輯的人請忽略

另外一種推薦使用模式OLOO(Object Linked Other Object)

var Parent = {

  name:function(name){

    this.name = name;

  },

  say:function(){

    return "Your name is " + this.name;

  }

}

var Child = Object.create(Parent);

Child.greet = function(){

  console.log("Hello, " + this.say() + ".");

}

 

var f1 = Object.create(Child);

f1.name('anan');

var f2 = Object.create(Child);

f2.name = ("lala");

f1.greet();

f2.greet();

這種互相連接的對象,簡化了執行過程,並能得獲得相同結果。

相關文章
相關標籤/搜索