第一:工廠模式:代碼如下 缺點:對象無法識別,因為原型都指向(Object) 第二:構造函數模式:代碼如下 優點:實例可以識別為一個特定的類型,即可以分 ‘類’ 缺點:每次創建實例時每個方法都要被創建一次 構造模式優化:代碼如下 優點:解決了 “每次創建實例時每個方法都要被創建一次“” 的問題 缺點 ...
第一:工廠模式:代碼如下
缺點:對象無法識別,因為原型都指向(Object)
function Person(name) { var obj = new Object(); obj.name = name; obj.say = function () { return "我是" + this.name; } return obj }
var person = Person("Ayden") console.log(person.name)//Ayden console.log(person.say())//我是Ayden
第二:構造函數模式:代碼如下
優點:實例可以識別為一個特定的類型,即可以分 ‘類’
缺點:每次創建實例時每個方法都要被創建一次
function Person(name) { this.name = name ; this.say = function () { return "我是" + this.name ; } } var person = new Person("Ayden") console.log(person)
構造模式優化:代碼如下
優點:解決了 “每次創建實例時每個方法都要被創建一次“” 的問題
缺點:面向對象三大特性之一——封裝。這叫啥封裝?
function Person(name) { this.name = name ; this.say = say } function say() { return "我是" + this.name; } var person = new Person("Ayden") console.log(person)
第三:原型模式:代碼如下
優點:實例的方法不會重新創建
缺點:1. 所有的屬性和方法都共用 2. 不能初始化參數 3.總想把代碼寫到一起,即封裝
function Person() { } Person.prototype.name = "Ayden"; Person.prototype.say = function () { return "我是" + this.name } var person = new Person(); console.log(person)
原型模式優化:代碼如下
優點:封裝性好些
缺點:丟失了constructor屬性
function Person() { } Person.prototype = { name :"Ayden", say :function () { return "我是" + this.name } } var person = new Person()
原型模式再優化:
優點:實例可以通過constructor屬性找到所屬構造函數
缺點:1. 所有的屬性和方法都共用 2. 不能初始化參數
function Person() { } Person.prototype = { constructor: Person, name: "Ayden", say: function () { return "我是" + this.name } } var person = new Person()
第四:混合模式:代碼如下:
優點:該私有的私有,該共用的共用(使用最廣泛的方式)
缺點:希望全部寫在一起,即更好的封裝性
function Person(name) { this.name = name ; } Person.prototype = { say:function () { return "我是" + this.name } } var person1 = new Person("Ayden"); var person2 = new Person("Tom")