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的解释相关推荐

  1. js 调用 oc 的解释

    JavaScriptCore NSInvocation js解释器在解释函数调用时,会在执行环境进行函数搜索,主调者类型判定: 如果是js调用,直接解释执行: 如果是oc调用,则将调用打包成NSInv ...

  2. 离散数学,Js 中闭包的解释和联系

    总共分三部分说明闭包问题: (1)部分  转发自: https://blog.csdn.net/wzwdcld/article/details/44783459,如侵权,请告知删除. 二元关系  设S ...

  3. JS中Prototype属性解释及常用方法

    1.prototype的定义 javascript中的每个类都有prototype属性,其prototype属性的解释是:返回对象类型原型的引用.每一个构造函数都有一个属性叫做原型.这个属性非常有用: ...

  4. js的Prototype属性 解释及常用方法

    函数:原型 每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文).这个属性非常有用:为一个特定类声明通用的变量或者函数. prototype的定义 你不需要显式地声明一 ...

  5. vue.js权威指南----代码解释实例

    1:P61(值绑定) <input type="checkbox" v-model="toggle" :true-value="a" ...

  6. JS中的indexof()解释

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject.indexOf(searchvalue,fromindex) 该方法将从头到尾地检索字符串 str ...

  7. JS each遍历详细解释(全)

    1]jquery的each()详细介绍 each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等,在javaScript开发过程中使用$each可 ...

  8. JS原型与原型链详细解释

    文章目录 一.JS原型链简要解释 二.JS原型链详细解释 1.构造函数 2.原型对象 3.`__proto__` 4.原型链 总结 一.JS原型链简要解释 原型是function对象上的一个属性, 它 ...

  9. Node.js入门(含NVM、NPM、NVM的安装)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以 ...

最新文章

  1. 三星Galaxy S8得到Daydream支持
  2. Ubuntu如何搭建Django与Flup和Nginx环境?
  3. mysql分区表达式_怎么定义 mysql hash分区使用的用 户定义的表达式
  4. 为什么说“不要教你的孩子学编程”?
  5. 20201007:力扣209周周赛题解记录(上)
  6. linux 怎么往内核加驱动,向Linux内核添加驱动
  7. AJAX TabContainer 样式设置
  8. 云计算学习一——网络基础
  9. 全民战“疫”,支付宝智能语音机器人到岗就位
  10. 集成百度做敏感词鉴定
  11. BUUCTF WEB PIAPIAPIA1
  12. 每日必读DZone news - 2022年2月十大DZone文章
  13. android 重复解绑服务,Android培训实战教程之多次解绑抛出异常原因
  14. 金融机构业务连续性管理
  15. Matlab数字图像处理——图像文件的读取
  16. SQL 查询语句 IIF()处理条件判断
  17. 程序员自学编程,推荐一些高质量自学网站?
  18. python小白第一天:解决python不是内部或外部命令,也不是可运行的程序或批处理文件/sublime无法显示python结果问题
  19. mongrel代码注解
  20. OpenLayers实现小车的轨迹查询的功能

热门文章

  1. 计算 a+aa+aaa+aaaa+aaaaa+ 的和_海南A级景区,三亚市就有14个,你都去过吗
  2. linux命令查看磁盘使用情况,linux查看磁盘使用情况命令
  3. nginx配置多个conf文件
  4. Redis数据类型--列表类型
  5. 好用的idea插件,一个字:真TM太爽了!
  6. 拼的html页面乱,页面分页html拼接
  7. C语言 extern “C” - C语言零基础入门教程
  8. Nmap渗透测试详解(一)
  9. python动态_python --动态类型
  10. mysql二级缓存,mybatis的动态sql和二级缓存