本人比較熟悉的就是這幾種方式了,每個人都有每個人的特色,所以方式也是說不盡的.但是借此,我想探討以下幾個問題:
1.有關于this指針
在建立多種類的時候都用到this,可是this的作用究竟是什么,而其實this在重用和繼承上起著很大的作用.我們先看看一個關于繼承的例子: 首先建立Person類:
var Person = function(){ this.name = null; } Person.prototype.setName = function(name){ this.name = name; } Person.prototype.getName = function(){ alert(this.name); } Person.prototype.getAge = function(){ var age = this.age || ''; alert(age); }
然后在建立一個Children類,并集成Person的所有方法和屬性:
var Children = function(age){ this.name = null; this.age = age; } Children.prototype = new Person(); //繼承Person的屬性和方法 Children.prototype.ageJudge = function(){ //另外為Children添加新方法 if(this.age > 18){ alert('成年人~'); } else { alert('未滿18歲呢~'); } } Children.prototype.getName = function(){ //重寫getName方法 var about = this.name + ' ' + this.age; alert(about); } var tom = new Children(12); var ages = tom.getAge(); //12 var judge = tom.ageJudge(); //未滿18歲呢~ var setN = tom.setName('Tom'); var get = tom.getName(); //Tom 12
這就是繼承,然后我們看個簡單的函數(shù)重用:
var SetColor = function(){ this.style.backgroundColor = '#000'; //this指向window } document.body.onclick = SetColor; //此時this指向body documnet.getElementById('color').onmouseout = SetColor; //this指向documnet.getElementById('color')
看了this的作用之后,想必對this有了新的認識了吧.現(xiàn)在就有疑問了,就是this的該用與不該用,下面在看個簡單的例子:
var setColor = { init:function(obj){ this.obj = obj; //this指向setColor this.obj.onclick = this.color; }, color:function(){ this.style.backgroundColor = '#000'; //this指向obj } }
就在一個類里,this卻指向2處地方,有時這樣總會讓人覺得困惑.剛學習的人更會被this弄的暈頭轉向.而稍稍改變一下寫代碼的方式:
var setColor = { init:function(obj){ setColor.obj = obj; setColor.obj.onclick = setColor.color; }, color:function(){ this.style.backgroundColor = '#000'; //this可以方便方法的重用 } }
這樣一下來,代碼可以更加的清晰了.所以編寫代碼的時候應該考慮好究竟今后的用途,還有能否重用.如果明確了不進行繼承或是重用,個人覺得應該盡可能的避免使用this,更有個比較常出現(xiàn)的問題.如下:
var Person = function(){ this.name = null; } Person.prototype.setName = function(name){ this.name = name; } Person.setName('tom'); //錯誤方式此時setName方法中的this將指向Person.prototypel,Person并沒有setName方法
前面講過,若果不寫成var p = new Person();p.setName('tom');該類里的this將會直接指向Person.prototypel.這種錯誤在編譯時,還是運行時都不會報錯.有時會造成讓人很頭痛的問題.所以在編寫代碼時,我總是很慎重的選用this.
出處:藍色理想
責任編輯:bluehearts
上一頁 JavaScript對象探討 [2] 下一頁 JavaScript對象探討 [4]
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|