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究竟代表什么?第二篇相关推荐
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- JS 面向对象编程、原型链、原型继承(个人学习总结)
一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...
- java实现选项卡定时轮播_原生js面向对象编程-选项卡(自动轮播)
原生js面向对象编程-选项卡(自动轮播) }#div1 input{color:#fff;width:100px;height:40px;background:darkseagreen;border: ...
- JS面向对象编程(OOP)
什么是JS面向对象编程(OOP)? 用对象的思想去写代码,就是面向对象编程. 上面这张图就是一个对象,紫色部分就是车的属性,黄色部分就是修改车的方法: 把他们集合到一个构造函数内,就是这样的 func ...
- js 面向对象编程实例
当我们在写js代码的时候,总是会想能否和java一样面向对象去编程,让人更易维护以及代码的分离.下面举一例说明: jsp页面如下 <!DOCTYPE html> <html>& ...
- JS面向对象编程三大特征
JS面向对象编程三大特征 JS面向对象的三大特征为封装.继承.多态.下面分别进行介绍: 封装 封装是指创建一个对象集中保存一个事物的属性与功能 继承 继承是指父亲的成员,孩子无需重复创建就可直接使用. ...
- js:面向对象编程,带你认识封装、继承和多态
本文首发于我的个人网站:http://cherryblog.site 周末的时候深入的了解了下javascript的面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森 什么是 ...
- js面向对象编程基础
js面向对象 文章目录 js面向对象 对象的引用 原型和原型链 系统对象与包装对象 面向对象相关语法 对象的引用 类型比较方式 对象比较时,值跟引用地址都相同时才相等. 类型赋值方式 ...
- js面向对象编程思想
一.编程思想 面向过程:所有事情都是亲力亲为,注重的是过程 面向对象:提出需求,找对象,对象解决,注重的是结果 创建一个对象,给这个对象,添加上属性和属性值,还有函数等方法,之后通过操作这个对象,来完 ...
- Java的OOP(面向对象编程)总结,有这一篇足矣
前言:OOP是Java语言中重要组成部分,其中面向对象编程是Java中核心编程思想,今天就将OOP知识进行总结 目录 一.思维导图 二.面对对象 1.首先要了解面对对象是什么? 2.具体说法 3.面对 ...
最新文章
- 杨海坡:比特币分叉往事
- lighttpd防御 Slow HTTP Denial of Service Attack 解决办法
- pythonfor循环加2_python-for循环
- 神曲背后的故事:算法工程师带你理性解构“蚂蚁呀嘿”
- 【SHARE】WEB前端学习资料
- 安装JAVA8要登录_JDK8的安装及环境配置
- c++ vector排序_个性化推荐系统源代码之基于LR模型的推荐系统离线排序方案
- Sublime个性化配置
- 全自动高清录播服务器,全自动高清录播服务器 高清录播系统 一体化操作;易使用 操作简便...
- CSRF与XSS攻击的原理与防范
- 吐血推荐HZHControls:我见过最美的Winform控件库
- 5G手机会给我们带来什么样的变化
- hp388服务器安装linux,HP DL388 G7做OLI,RAID,BIOS设置linux安装概要
- SMART 监控项研究以及存储健康分级机制
- 最早walkman android,首款Walkman血统安卓手机 索爱E16i评测
- 锤子发布会的那些梗-2016年10月18号
- CAMx-Python/smoke/mcm
- 【AD封装】三极管,MOS管,部分LDO(TO,SOT系列)(带3D)
- 数仓数据处理与数据流向
- 关于FIR滤波器的系数
热门文章
- 【Interfacenavigation】风格和主题(21)
- Linux文件创建时间
- VB 调用 QuickTestpro 脚本
- AC日记——[SDOI2010]大陆争霸 洛谷 P3690
- C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
- CSS reset 标签初始化设置
- 3D脚本 maxscript入门教程(6)
- UITableviewcell重用机制以及解决重绘出现的重叠现象
- kettle 遇到 解决Incorrect integer value: '' for column 'id' at row 1 完美解决-费元星
- BI推荐8款优秀的app