javascript做爲一門解釋性腳本語言,有着其獨特的魅力.既具備函數編程的特性,又具備面向對象的特徵.之前的開發中,大可能是使用了javascript的函數式編程,最近,發現其的面向對象也有必定的優點,在較爲複雜的插件構建中,效果會很明顯. javascript
其實,本質上javascript包括三部分,一部分是DOM編程,操做頁面中的元素,一部分是BOM編程,獲取瀏覽器的一些性能特徵,最後,一部分也就是其核心,對ECMA-262規則的實現.如今,總結一下面向對象的學習. java
面向對象之一封裝: 編程
原生形式的封裝: 瀏覽器
建立了一個person的對象,這種方式比較繁瑣. 閉包
var person = { name:'小蘭', age : 23 }; alert(person.name);因此有了改進方式
var Person = function(name,age){ return { name:name, age : age } } //建立了一個Person的類 //建立一個Person對象 var xiaoming = Person('小明',23); alert(xiaoming.name);
構造函數建立對象 函數式編程
var Person = function(name,age) { this.name = name; this.age = age; eat = function(){ alert('情人節怎麼樣勒?'); } }; var xiaohong = new Person('小紅',23); alert(xiaohong.name); var xiaolan = new Person('小蘭',25); alert(xiaolan.name); 可是,有個問題eat方法不屬於Person這個類公有,每次建立對象還必須 爲其開闢內存空間 alert(xiaohong.prototype.eat == xiaolan.prototype.eat) false
原型模式建立 每一個js對象都有一個對其原型的內部引用 函數
var Person = function(name,age) { this.name = name; this.age = age; }; prototype:原型上加的是對象不變的屬性,和方法 Person.prototype.eat = function(){ alert('this is one day~'); }; var beili = new Person('貝利',34); var mingren = new Person('鳴人',23); alert(beili.prototype.eat == mingren.prototype.eat) true
封裝完成. 性能
new 關鍵詞,解釋:js中使用new時會建立一個空對象,做爲參數傳給function,若是 學習
function沒有return時就會返回this,因此不要在生成實例時,使用return,這就是''this關鍵字 this
關聯於其所在的做用域'
in 關鍵詞 用於查看對象中的變量;
for(var prop in Person) { alert(prop); } //結果: name age eat這是js中的類和對象,對於js面向對象的封裝,有個朋友推薦使用閉包~~不是很清楚!!