一、分析代码执行结果

var length = 10;
function fn() {
    console.log(this.length);
}
var obj = {
    length: 5,
    method: function (fn) {
      fn();
      arguments[0]();
      fn.call(obj, 12);
    }
};
obj.method(fn, 1); //10 2 5

fn();  //this指向window,默认绑定,window的length值为10

arguments[0]();  //this指向arguments,隐式绑定,arguments的length值为2

fn.call(obj, 12);  //this指向obj,显示绑定,obj的length值为5

二、修改下面的代码,使结果不是undefined。

function A(){
    function initName(){
        this.name = 'camille'; // 这里的this指向window
    }
    initName();
}
var a = new A();
console.log(a.name); //undefined

方法1

function A(){
    var _this = this; // 这里的this指向A{}
    function initName(){
        _this.name = 'camille'; // 这里的_this指向A{ name:"camille" }
    }
    initName();
}
var a = new A();
console.log(a.name); // camille

方法2

function A(){
    function initName(){
        this.name = 'camille';
    }
    initName.call(this); // 这里的this指向A{ name:"camille" }
}
var a = new A();
console.log(a.name);// camille

方法3

function A(){
    function initName(){
        this.name = 'camille'; // 这里的this指向initName{ name:"camille" }
    }
    return new initName();
}
var a = A();
console.log(a.name);// camille

方法4

function A(){
    (function initName(that){
        that.name = 'camille'; // 这里的that指向A{ name:"camille" }
    })(this);
}
var a = new A();
console.log(a.name);// camille

方法5

function A(){
}
A.prototype.initName = function(){
    this.name = 'camille'; // 这里的this指向A{ name:"camille" }
}
var a = new A();
a.initName();
console.log(a.name);// camille

方法6

function A(){
    var name;
    this.initName = function(){
        name = 'camille'; // 这里的this指向A{}
    }
    this.getName = function(){
        return name;
    };
    this.initName();// 这里的this指向A{}
}
var a = new A();
console.log(a.getName());// camille

方法7

function A(){
    var name;
    this.initName = function(){
        name = 'camille';
    }
    this.getName = function(){
        return name;
    };
    this.initName();
}
function B(){
A.call(this);// 这里的this指向B{}
}
var b = new B();
console.log(b.getName());// camille

方法8

function A(){
    this.name='camille';
}
A.prototype.name='houyi';
var a=new A();
console.log(a.name);// camille
delete(a.name);
console.log(a.name);// houyi

方法9

function A(){
    this.name='camille';
}
A.prototype.name='houyi';
var a=new A();
a.name='gamiye';
console.log(a.name);// gamiye
delete(a.name);
console.log(a.name);// houyi

js寻找对象的方式:先在自身找,找不到才会去原型链上找。

运行程序,解读this指向---case1的更多相关文章

  1. 操作系统篇-hello world(免系统运行程序)

     || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言     今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...

  2. windows服务编写和“以管理员运行”程序的方法

    本文将首先解释如何 创建 一个定期查询可用物理内存并将结果写入某个文本文件的服务.然后指导你完成生成,安装和实现服务的整个过程. 第一步:主函数和全局定义 首先,包含所需的头文件.例子要调用 Win3 ...

  3. python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统

    python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统 引子 python是什么? 什么是编程语言?为何要有编程语言? 什么是编程?什么是程序?什么是进程?为何要编程? 计算机基础 ...

  4. CYPEESS USB3.0程序解读之---GPIO

    CPRESS 官方给出的SDK1.1中(目前最新的SDK),提供了大量的例程供我们开发软件的时候作参考,就像STM32的开发一样提供了库一样,但是又不是库,仅仅是参考例程. 首先看一个简单一点的GPI ...

  5. Xcode 运行程序,左侧memory 不显示内存

    运行程序后,xcode 不显示当前使用的内存情况,问题是打开了僵尸--enable zoombie Objects,关闭即可 打开 product--->SCheme-->EditSChe ...

  6. C# 管理员身份运行程序

    在使用winform程序获取调用cmd命令提示符时,如果是win7以上的操作系统,会需要必须以管理员身份运行才会执行成功,否则无效果或提示错误. 比如在通过winform程序执行cmd命令时,某些情况 ...

  7. IntelliJ IDEA 配置运行程序

    IntelliJ IDEA 对于Javaer开发来说还是很nice的,就是第一次用可能配置项有点生疏,这里就记录一下IntelliJ IDEA 配置运行程序. 1. 点击Edit Config... ...

  8. Usage: AddDimensionedImage imageFile outputFile eclipse 运行程序出错

    关于这个在eclipse中运行java程序的错,首先确认你的jdk,jre是否完整,并且与你的eclipse的位数相同,当然我相信这个错误大家应该都会去检查到. 第二个关于addDimensioned ...

  9. [原创]Win7、Win8、Win10始终以管理员身份运行程序。

    在Win7.Win8.Win10系统中,以管理员身份运行程序很麻烦,一般有以下几种方式: 1.在可执行程序或快捷方式上右键,以管理员身份运行: 2.在可执行程序或快捷方式上右键->属性-> ...

随机推荐

  1. 2017-2018-2 20155303『网络对抗技术』Exp5:MSF基础应用

    2017-2018-2 20155303『网络对抗技术』Exp5:MSF基础应用 --------CONTENTS-------- 一.原理与实践说明 1.实践内容 2.预备知识 3.基础问题 二.实 ...

  2. nginx反向代理实现前后端分离&跨域问题

    1.代理和跨域 1.1 正向代理 1)用户希望代理服务器帮助其和要访问服务器之间实现通信,需要: a.用户IP报文的目的IP=代理服务器IP: b.用户报文端口号=代理服务器监听端口号: c.HTTP ...

  3. python操作mysql数据库的常用方法使用详解

    python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...

  4. 转载:编译安装Nginx(1.5.1)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19618.html 1.5 configure详解 可以看出,configure命令至关重要,下文将详细介绍如何使用configure ...

  5. 解读使用Daisy-chain(菊花链)方式筛选一定范围内素数的代码

    go version go1.11 windows/amd64 本文为解读 参考链接1 中的 菊花链 一节 的示例程序,此程序和 参考链接2 中代码有些类似:前者有范围,后者是无限循环.清楚了 参考链 ...

  6. PYTHON-匿名函数,递归与二分法,面向过程编程-练习

    # 四 声明式编程练习题 # 1.将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写names = ['egon', 'alex_sb', ' ...

  7. 实现自己的Koa2

    这部分的代码在https://github.com/zhaobao1830/koa2中demo文件夹中 Koa就是基于node自带的http模块,经过封装,监听端口,实现ctx(上下文)管理,中间件管 ...

  8. mysql的undo log和redo log

    在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件.     MySQL中的日志文件,有这么两 ...

  9. InnoDB的关键特性-插入缓存,两次写,自适应hash索引

    InnoDB存储引擎的关键特性包括插入缓冲.两次写(double write).自适应哈希索引(adaptive hash index).这些特性为InnoDB存储引擎带来了更好的性能和更高的可靠性. ...

  10. LiteQuery MAX(Integer)、MAX(String) 判断是否返回值

    unit Unit6; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...