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({});

  正确。

js self = this的解释的更多相关文章

  1. Js apply 方法 具体解释

    Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了 ...

  2. js 调用 oc 的解释

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

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

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

  4. node.js基本概念简单解释

    1:什么是回调函数? 2:什么是同步异步 3:什么是I/O 4:什么是单线程/多线程 5:什么是阻塞/非阻塞 6:什么是事件 7:什么是事件驱动 8:什么是事件驱动的回调 9:什么是事件循环 解释: ...

  5. js中的预解释

    在js中,带var 和function关键字的需要预解释: 那什么是预解释?就是在js代码执行之前,先申明好带有var 关键字和带有function关键字的变量,在内存里先安排好.但是带有var关键字 ...

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

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

  7. <!--[if IE]><script type="text/javascript" src="matrix/js/html5.js"></script><![endif]-->代码解释

    块注释例子 1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->2. <!--[if IE]> 所有的I ...

  8. js跨域问题解释 使用jsonp或jQuery的解决方案

    js跨域及解决方案 1.什么是跨域 我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题. 跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说, ...

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

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

随机推荐

  1. Spark Application的调度算法

    要想明白spark application调度机制,需要回答一下几个问题: 1.谁来调度? 2.为谁调度? 3.调度什么? 3.何时调度? 4.调度算法 前四个问题可以用如下一句话里来回答:每当集群资 ...

  2. 【Java】JDK类 CountDownLatch

    一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在当前计数到达 ...

  3. PyCharm 代码完成/代码提示

    因为python是动态语言,所以在有些情况ide会无法有效代码提示,见下: import sqlite3 conn = sqlite3.connect('d:/xxx.db') conn.  #这里按 ...

  4. java执行linux命令

    package com.gtstar.collector; import java.io.BufferedReader;import java.io.IOException;import java.i ...

  5. css三级菜单效果

    一个简单实用的css三级菜单效果 <!doctype html> <html> <head> <meta charset="utf-8"& ...

  6. Android进程间通讯

    最近研究了一下Android进程间通讯,原来只是会用,但是只是会用是不行滴,就来研究一下. 刚开始看的时候,我的头是这么大,看了一夜的时候,头就变成这样了,,吓得宝宝赶紧上床休息了,. 先喝喝茶讲个故 ...

  7. HDU2433 BFS最短路

    Travel Time Limit: 10000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. 关于兼容IE的一些策略

    --css 盒子模型下的 box-sizing 属性,只兼容到ie8: -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -o- ...

  9. C语言两种查找方式(分块查找,二分法)

    二分法(必须要保证数据是有序排列的):   分块查找(数据有如下特点:块间有序,块内无序):    

  10. java学习笔记(2)

    上篇讲了一些概念之类的知识点,现在继续总结知识点: 1.用户自己在控制面板输入内容是如何实现的:java中有一个类可实现这个功能 类Scanner: import java.util.Scanner; ...