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

   代码例如以下:

 

 //内部对象AutoCompleteInner
function 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就是指实例化的对象。就非常难理解此处的问题。

最新文章

  1. Oracle数据库坏块的恢复
  2. java 队列基础操作
  3. Android录音应用
  4. java.io.DataInput接口和java.io.DataOutput接口详解
  5. 基于互联网的VOIP电话系统组建
  6. MARCHdesign_王濤's 星云个人网站 | www.xingyun.cn/MARCHdesign
  7. bootstrap 字体图标
  8. hashtable 简单介绍
  9. 调参必备---GridSearch网格搜索
  10. wc 命令详解
  11. CSS ——padding
  12. frontpage 2010.2003绿色版
  13. python网络编程(五)
  14. 关于那个.get .post .ajax ztree 还有后台servlet传递数据
  15. JS中的事件冒泡——总结
  16. SonarQube代码质量管理工具的安装(Linux)
  17. json的工具按照键进行排序
  18. redis的使用及方法
  19. cnVCL的安装
  20. 基于EasyUI 快速搭建权限管理平台

热门文章

  1. bigdecimal解决小数间的加减乘除
  2. 从零开始 Code Review,两年实战经验分享!
  3. 净心诀---python3装饰器
  4. 在vue中获取微信支付code及code被占用问题的解决?
  5. UserCF算法和ItemCF算法的对比
  6. Jmeter-Json提取器、用户定义变量配置
  7. How to enter special characters like “&” in oracle database? [duplicate]
  8. 转载-------- JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】
  9. echarts点击柱状图时触发点击事件
  10. Java ArrayList使用技巧 - 两个ArrayList去除重复的元素