天天看點

js 閉包 原型

在一個項目中大量使用js,工程項目與網站開發有一些不一樣,在我接觸的工程項目中普遍使用js 不夠多,大部分用戶端可做事,交給了服務端,而且在使用js時不夠規範,很容易造成代碼難以閱讀、記憶體洩漏問題,不注意js 輸寫方式。而在網站開發中(尤其一些大網站,js輸出的非常漂亮、完美無論使用jquery,還是prototype 架構,還是不用架構,都有自己良好一套東東可用) 

js輸寫最好還是可以面向對象方式 用類方向進行包裝 js輸寫兩種方式 閉包 原型 

閉包:(借用的一個例子) 

複制代碼代碼如下:

function Person(firstName, lastName, age) 

//私有變量: 

var _firstName = firstName; 

var _lastName = lastName; 

//公共變量: 

this.age = age; 

//方法: 

this.getName = function() 

return(firstName + " " + lastName); 

}; 

this.SayHello = function() 

alert("Hello, I'm " + firstName + " " + lastName); 

var BillGates = new Person("Bill", "Gates", 53); 

原型:(借用的一個例子) 

  //定義構造函數 

function Person(name) 

this.name = name; //在構造函數中定義成員 

//方法定義到構造函數的prototype上 

Person.prototype.SayHello = function() 

alert("Hello, I'm " + this.name); 

//子類構造函數 

function Employee(name, salary) 

Person.call(this, name); //調用上層構造函數 

this.salary = salary; //擴充的成員 

//子類構造函數首先需要用上層構造函數來建立prototype對象,實作繼承的概念 

Employee.prototype = new Person() //隻需要其prototype的方法,此對象的成員沒有任何意義! 

//子類方法也定義到構造函數之上 

Employee.prototype.ShowMeTheMoney = function() 

alert(this.name + " $" + this.salary); 

var BillGates = new Person("Bill Gates"); 

BillGates.SayHello(); 

var SteveJobs = new Employee("Steve Jobs", 1234); 

SteveJobs.SayHello(); 

這兩種方法各有優缺點,第一種看起來更像一個類 每個對象設定一份方法有很大浪費,而且資源回收不利,第二種方法,看起來不是很漂亮,可性能很好(不過如果你使用prototype架構,就可以完美解決結構與性能問題了。) 

實際在使用jquery 還是prototype問題上,我的一點點體會是 jquery使用閉包方式,而prototype當然原型,jquery更加适合對單個對象操作,而prototype更适合做一些用戶端控件。實際我更喜歡在項目中使用jquery 而網站上更關注prototype

繼續閱讀