总觉得自己弄明确了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究竟代表什么?第二篇相关推荐

  1. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  2. JS 面向对象编程、原型链、原型继承(个人学习总结)

    一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...

  3. java实现选项卡定时轮播_原生js面向对象编程-选项卡(自动轮播)

    原生js面向对象编程-选项卡(自动轮播) }#div1 input{color:#fff;width:100px;height:40px;background:darkseagreen;border: ...

  4. JS面向对象编程(OOP)

    什么是JS面向对象编程(OOP)? 用对象的思想去写代码,就是面向对象编程. 上面这张图就是一个对象,紫色部分就是车的属性,黄色部分就是修改车的方法: 把他们集合到一个构造函数内,就是这样的 func ...

  5. js 面向对象编程实例

    当我们在写js代码的时候,总是会想能否和java一样面向对象去编程,让人更易维护以及代码的分离.下面举一例说明: jsp页面如下 <!DOCTYPE html> <html>& ...

  6. JS面向对象编程三大特征

    JS面向对象编程三大特征 JS面向对象的三大特征为封装.继承.多态.下面分别进行介绍: 封装 封装是指创建一个对象集中保存一个事物的属性与功能 继承 继承是指父亲的成员,孩子无需重复创建就可直接使用. ...

  7. js:面向对象编程,带你认识封装、继承和多态

    本文首发于我的个人网站:http://cherryblog.site 周末的时候深入的了解了下javascript的面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森 什么是 ...

  8. js面向对象编程基础

    js面向对象 文章目录 js面向对象 对象的引用 原型和原型链 系统对象与包装对象 面向对象相关语法 对象的引用 类型比较方式      对象比较时,值跟引用地址都相同时才相等. 类型赋值方式     ...

  9. js面向对象编程思想

    一.编程思想 面向过程:所有事情都是亲力亲为,注重的是过程 面向对象:提出需求,找对象,对象解决,注重的是结果 创建一个对象,给这个对象,添加上属性和属性值,还有函数等方法,之后通过操作这个对象,来完 ...

  10. Java的OOP(面向对象编程)总结,有这一篇足矣

    前言:OOP是Java语言中重要组成部分,其中面向对象编程是Java中核心编程思想,今天就将OOP知识进行总结 目录 一.思维导图 二.面对对象 1.首先要了解面对对象是什么? 2.具体说法 3.面对 ...

最新文章

  1. 杨海坡:比特币分叉往事
  2. lighttpd防御 Slow HTTP Denial of Service Attack 解决办法
  3. pythonfor循环加2_python-for循环
  4. 神曲背后的故事:算法工程师带你理性解构“蚂蚁呀嘿”
  5. 【SHARE】WEB前端学习资料
  6. 安装JAVA8要登录_JDK8的安装及环境配置
  7. c++ vector排序_个性化推荐系统源代码之基于LR模型的推荐系统离线排序方案
  8. Sublime个性化配置
  9. 全自动高清录播服务器,全自动高清录播服务器 高清录播系统 一体化操作;易使用 操作简便...
  10. CSRF与XSS攻击的原理与防范
  11. 吐血推荐HZHControls:我见过最美的Winform控件库
  12. 5G手机会给我们带来什么样的变化
  13. hp388服务器安装linux,HP DL388 G7做OLI,RAID,BIOS设置linux安装概要
  14. SMART 监控项研究以及存储健康分级机制
  15. 最早walkman android,首款Walkman血统安卓手机 索爱E16i评测
  16. 锤子发布会的那些梗-2016年10月18号
  17. CAMx-Python/smoke/mcm
  18. 【AD封装】三极管,MOS管,部分LDO(TO,SOT系列)(带3D)
  19. 数仓数据处理与数据流向
  20. 关于FIR滤波器的系数

热门文章

  1. 【Interfacenavigation】风格和主题(21)
  2. Linux文件创建时间
  3. VB 调用 QuickTestpro 脚本
  4. AC日记——[SDOI2010]大陆争霸 洛谷 P3690
  5. C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
  6. CSS reset 标签初始化设置
  7. 3D脚本 maxscript入门教程(6)
  8. UITableviewcell重用机制以及解决重绘出现的重叠现象
  9. kettle 遇到 解决Incorrect integer value: '' for column 'id' at row 1 完美解决-费元星
  10. BI推荐8款优秀的app