js self = this的解释
Demo 1:
function Person(){this.name = 'hjzgg';this.age = 24;this.show = function(){alert(name + " " + age);}}var p = new Person();p.show();
错误:name 和 age都没有定义。
Demo 2:
function Person(){this.name = 'hjzgg';this.age = 24;this.show = function(){alert(this.name + " " + this.age);}}var p = new Person();p.show();
正确。
Demo 3:
function Person(){this.name = 'hjzgg';this.age = 24;this.show = function(){alert(this.name + " " + this.age);}}var p = new Person();p.show.call({});
错误:name 和 age 未定义。
Demo 4:
function Person(){this.name = 'hjzgg';this.age = 24;var self = this;this.show = function(){alert(self.name + " " + self.age);}}var p = new Person();p.show.call({});
通过 var self = this,正确。
Demo 5:
function Person(){this.sayHello = function(){alert('hello world!');}this.show = function(){sayHello();}}var p = new Person();p.show();
错误:sayHello未定义。
Demo 6:
function Person(){var sayHello = function(){alert('hello world!');}this.show = function(){sayHello();}}var p = new Person();p.show();
正确。
结论:
每个函数都有属于自己的this对象,这个this对象是在运行时基于函数的执行环境绑定的,即在全局对象中,this指向的是window对象;在自定义函数中,this对象指向的是调用这个函数的对象,也就是说,this指向的是调用执行环境的那个对象。如果是在函数嵌套环境中,this指代的是调用外部函数或者内部函数的执行环境的对象。
那么这里可能又会出现新的疑问:为什么self.name 和 self.age是正确的呢?
其实这又涉及到另一个话题:实例成员与局部成员。我们创建构造函数的意义就是要用它来创建实例,那么所有属于实例的成员都需要用this来定义;而只有那些不属于实例的成员才不会用this定义;当然,用this定义了方法以后,在函数作用域内部要调用此方法时,就需要加上this了。
Demo 7:
var person = {name : 'hjzgg',age : 24,show : function(){alert(name + " " + age);}}person.show();
错误:name 和 age未定义。
Demo 8:
var person = {name : 'hjzgg',age : 24,show : function(){alert(this.name + " " + this.age);}}person.show();
正确。
Demo 9:
var person = {name : 'hjzgg',age : 24,show : function(){alert(this.name + " " + this.age);}}person.show.call({});
错误:name 和 age 未定义。
Demo 10:
var person = {name : 'hjzgg',age : 24,show : function(){alert(person.name + " " + person.age);}}person.show.call({});
正确。
转载于:https://www.cnblogs.com/hujunzheng/p/5330486.html
js self = this的解释相关推荐
- js 调用 oc 的解释
JavaScriptCore NSInvocation js解释器在解释函数调用时,会在执行环境进行函数搜索,主调者类型判定: 如果是js调用,直接解释执行: 如果是oc调用,则将调用打包成NSInv ...
- 离散数学,Js 中闭包的解释和联系
总共分三部分说明闭包问题: (1)部分 转发自: https://blog.csdn.net/wzwdcld/article/details/44783459,如侵权,请告知删除. 二元关系 设S ...
- JS中Prototype属性解释及常用方法
1.prototype的定义 javascript中的每个类都有prototype属性,其prototype属性的解释是:返回对象类型原型的引用.每一个构造函数都有一个属性叫做原型.这个属性非常有用: ...
- js的Prototype属性 解释及常用方法
函数:原型 每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文).这个属性非常有用:为一个特定类声明通用的变量或者函数. prototype的定义 你不需要显式地声明一 ...
- vue.js权威指南----代码解释实例
1:P61(值绑定) <input type="checkbox" v-model="toggle" :true-value="a" ...
- JS中的indexof()解释
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject.indexOf(searchvalue,fromindex) 该方法将从头到尾地检索字符串 str ...
- JS each遍历详细解释(全)
1]jquery的each()详细介绍 each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等,在javaScript开发过程中使用$each可 ...
- JS原型与原型链详细解释
文章目录 一.JS原型链简要解释 二.JS原型链详细解释 1.构造函数 2.原型对象 3.`__proto__` 4.原型链 总结 一.JS原型链简要解释 原型是function对象上的一个属性, 它 ...
- Node.js入门(含NVM、NPM、NVM的安装)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以 ...
最新文章
- 三星Galaxy S8得到Daydream支持
- Ubuntu如何搭建Django与Flup和Nginx环境?
- mysql分区表达式_怎么定义 mysql hash分区使用的用 户定义的表达式
- 为什么说“不要教你的孩子学编程”?
- 20201007:力扣209周周赛题解记录(上)
- linux 怎么往内核加驱动,向Linux内核添加驱动
- AJAX TabContainer 样式设置
- 云计算学习一——网络基础
- 全民战“疫”,支付宝智能语音机器人到岗就位
- 集成百度做敏感词鉴定
- BUUCTF WEB PIAPIAPIA1
- 每日必读DZone news - 2022年2月十大DZone文章
- android 重复解绑服务,Android培训实战教程之多次解绑抛出异常原因
- 金融机构业务连续性管理
- Matlab数字图像处理——图像文件的读取
- SQL 查询语句 IIF()处理条件判断
- 程序员自学编程,推荐一些高质量自学网站?
- python小白第一天:解决python不是内部或外部命令,也不是可运行的程序或批处理文件/sublime无法显示python结果问题
- mongrel代码注解
- OpenLayers实现小车的轨迹查询的功能
热门文章
- 计算 a+aa+aaa+aaaa+aaaaa+ 的和_海南A级景区,三亚市就有14个,你都去过吗
- linux命令查看磁盘使用情况,linux查看磁盘使用情况命令
- nginx配置多个conf文件
- Redis数据类型--列表类型
- 好用的idea插件,一个字:真TM太爽了!
- 拼的html页面乱,页面分页html拼接
- C语言 extern “C” - C语言零基础入门教程
- Nmap渗透测试详解(一)
- python动态_python --动态类型
- mysql二级缓存,mybatis的动态sql和二级缓存