js面向对象编程:this究竟代表什么?第二篇
生活随笔
收集整理的這篇文章主要介紹了
js面向对象编程:this究竟代表什么?第二篇
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ? ?總覺得自己弄明確了js中this的含義。this總是指向調(diào)用方法的對象,作為方法調(diào)用,那么this就是指實例化的對象。但前幾天自己寫腳本卻遇到了一個非常奇怪的問題。
? ?代碼例如以下:
?
//內(nèi)部對象AutoCompleteInnerfunction AutoCompleteInner(transformResultInner){if(transformResultInner){this.transformResultInner=transformResultInner;} }AutoCompleteInner.prototype.transformResultInner = function() { alert("inner transformResult");}AutoCompleteInner.prototype.TestInner = function() { this.transformResultInner();}//封裝了對內(nèi)部對象AutoCompleteInner的調(diào)用function AutoCompleteOuter(obj) { this.TextField = obj.TextField;this.ValueField = obj.ValueField;if (obj.transformResult) {this.transformResultOuter = obj.transformResultOuter;} }AutoCompleteOuter.prototype.transformResultOuter=function() {alert("TextField:"+this.TextField+",ValueField:"+this.ValueField); }AutoCompleteOuter.prototype.TestOuter = function () {var test =new AutoCompleteInner(this.transformResultOuter);test.TestInner();}測試代碼1 //測試代碼 1 function test(){ var obj={};obj.TextField = "TextField";obj.ValueField ="ValueField"; var temp=new AutoCompleteOuter(obj); temp.transformResultOuter(); }彈出現(xiàn)實的內(nèi)容為“TextField:TextField,ValueField:ValueField”這個非常easy理解。在實例AutoCompleteOuter的方法transformResultOuter中的this就是AutoCompleteOuter的實例temp,彈出的內(nèi)容自然也和合理,符合作為方法調(diào)用,那么this就是指實例化的對象。
測試代碼2
function test(){ var obj={};obj.TextField = "TextField";obj.ValueField ="ValueField"; var temp=new AutoCompleteOuter(obj); // temp.transformResultOuter();temp.TestOuter();} 通過分析代碼。發(fā)現(xiàn)。調(diào)用的也是AutoCompleteOuter的方法transformResultOuter,但:問題是:
彈出的內(nèi)容卻是“TextField:undefined,ValueField:undefined”
非常奇怪,調(diào)用的方法一樣傳遞的參數(shù)也樣,但為什么彈出的彈出的內(nèi)容不一樣的?
經(jīng)過分析發(fā)如今測試二的代碼中this的含義和測試一中的代碼中的this已經(jīng)不一樣了,測試一中的this代表的是AutoCompleteOuter的實例。但在測試二中this卻代表的是AutoCompleteInner的實例,這也就是為什么同樣的代碼為什么顯示的內(nèi)容卻不一樣的原因了。
看來this總是指向調(diào)用方法的對象這才是區(qū)分this的根本方法。this是上下文相關的,怎樣機械的理解作為方法調(diào)用,那么this就是指實例化的對象。就非常難理解此處的問題。
轉(zhuǎn)載于:https://www.cnblogs.com/ldxsuanfa/p/10840821.html
總結(jié)
以上是生活随笔為你收集整理的js面向对象编程:this究竟代表什么?第二篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载自简书] ASPNetCore上传
- 下一篇: 团队软件开发第一次冲刺(六)