欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

js面向对象编程:this究竟代表什么?第二篇

发布时间:2025/3/16 编程问答 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 js面向对象编程:this究竟代表什么?第二篇 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

     总觉得自己弄明确了js中this的含义。this总是指向调用方法的对象,作为方法调用,那么this就是指实例化的对象。但前几天自己写脚本却遇到了一个非常奇怪的问题。

   代码例如以下:

 

//内部对象AutoCompleteInnerfunction AutoCompleteInner(transformResultInner){if(transformResultInner){this.transformResultInner=transformResultInner;} }AutoCompleteInner.prototype.transformResultInner = function() { alert("inner transformResult");}AutoCompleteInner.prototype.TestInner = function() { this.transformResultInner();}//封装了对内部对象AutoCompleteInner的调用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(); }
弹出现实的内容为“TextField:TextField,ValueField:ValueField”这个非常easy理解。在实例AutoCompleteOuter的方法transformResultOuter中的this就是AutoCompleteOuter的实例temp,弹出的内容自然也和合理,符合作为方法调用,那么this就是指实例化的对象。

測试代码2

function test(){ var obj={};obj.TextField = "TextField";obj.ValueField ="ValueField"; var temp=new AutoCompleteOuter(obj); // temp.transformResultOuter();temp.TestOuter();} 通过分析代码。发现。调用的也是AutoCompleteOuter的方法transformResultOuter,但:问题是:

弹出的内容却是“TextField:undefined,ValueField:undefined

非常奇怪,调用的方法一样传递的參数也样,但为什么弹出的弹出的内容不一样的?

经过分析发如今測试二的代码中this的含义和測试一中的代码中的this已经不一样了,測试一中的this代表的是AutoCompleteOuter的实例。但在測试二中this代表的是AutoCompleteInner的实例,这也就是为什么同样的代码为什么显示的内容却不一样的原因了。

看来this总是指向调用方法的对象这才是区分this的根本方法。this是上下文相关的,怎样机械的理解作为方法调用,那么this就是指实例化的对象。就非常难理解此处的问题。

转载于:https://www.cnblogs.com/ldxsuanfa/p/10840821.html

总结

以上是生活随笔为你收集整理的js面向对象编程:this究竟代表什么?第二篇的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。