运行程序,解读this指向---case1
一、分析代码执行结果
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的更多相关文章
- 操作系统篇-hello world(免系统运行程序)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...
- windows服务编写和“以管理员运行”程序的方法
本文将首先解释如何 创建 一个定期查询可用物理内存并将结果写入某个文本文件的服务.然后指导你完成生成,安装和实现服务的整个过程. 第一步:主函数和全局定义 首先,包含所需的头文件.例子要调用 Win3 ...
- python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统
python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统 引子 python是什么? 什么是编程语言?为何要有编程语言? 什么是编程?什么是程序?什么是进程?为何要编程? 计算机基础 ...
- CYPEESS USB3.0程序解读之---GPIO
CPRESS 官方给出的SDK1.1中(目前最新的SDK),提供了大量的例程供我们开发软件的时候作参考,就像STM32的开发一样提供了库一样,但是又不是库,仅仅是参考例程. 首先看一个简单一点的GPI ...
- Xcode 运行程序,左侧memory 不显示内存
运行程序后,xcode 不显示当前使用的内存情况,问题是打开了僵尸--enable zoombie Objects,关闭即可 打开 product--->SCheme-->EditSChe ...
- C# 管理员身份运行程序
在使用winform程序获取调用cmd命令提示符时,如果是win7以上的操作系统,会需要必须以管理员身份运行才会执行成功,否则无效果或提示错误. 比如在通过winform程序执行cmd命令时,某些情况 ...
- IntelliJ IDEA 配置运行程序
IntelliJ IDEA 对于Javaer开发来说还是很nice的,就是第一次用可能配置项有点生疏,这里就记录一下IntelliJ IDEA 配置运行程序. 1. 点击Edit Config... ...
- Usage: AddDimensionedImage imageFile outputFile eclipse 运行程序出错
关于这个在eclipse中运行java程序的错,首先确认你的jdk,jre是否完整,并且与你的eclipse的位数相同,当然我相信这个错误大家应该都会去检查到. 第二个关于addDimensioned ...
- [原创]Win7、Win8、Win10始终以管理员身份运行程序。
在Win7.Win8.Win10系统中,以管理员身份运行程序很麻烦,一般有以下几种方式: 1.在可执行程序或快捷方式上右键,以管理员身份运行: 2.在可执行程序或快捷方式上右键->属性-> ...
随机推荐
- Win10安装TensorFlow1.9-GPU版本
前言 前段时间更新自己电脑上的tf1.4到1.9,没想到踩了这么多坑...特意记录下来希望可以帮到大家 删除旧版本 如果你电脑上没有安装旧版本的tf,就可以忽略这一步.我是因为想要升级到最新版本,所以 ...
- 如何手动删除服务?Windows手动删除服务列表中残留服务的方法
https://www.jb51.net/os/windows/267738.html
- emmc基础技术8:操作模式2-device identification mode
1.前言 eMMC总线操作包含: boot mode, device identification mode interrupt mode data transfer mode 本文主要描述devic ...
- 统一过程模型(UP)
1.前言 本文主要对迭代开发的一种方法 统一过程(UP),进行概要说明,以作为<UML和模式应用>这本书的补充. 2. 统一过程概述 统一过程 统一过程(RUP/UP,Rational U ...
- was监控脚本编写时的注意点
server = AdminConfig.getid('/Cell:myCell012/Node:myNode12/Server:server1/') 不可缺少斜杠,不然会报错 如果没法登录管理控制台 ...
- Eclipse通过jdbc连接sqlserver2008数据库的两种方式
数据库登录身份验证方式有两种 其中服务器名称即为安装SQLServer2008的电脑,充当数据库服务器,在笔者这里就是自己的电脑名称. 身份验证方式有两种:windows身份验证和SQLSer ...
- poj2442 堆应用
#include <cstdio> #include <cstring> #include <string> #include <vector> #in ...
- vue组件库(二):基于verdaccio工具npm私服搭建
大纲 搭建npm私服的必要性 搭建npm私服的主要操作 一.搭建npm私服的必要性 二.搭建npm私服的主要操作 1.环境准备 确保服务器已安装以下包: node(必须) 安装了nodenpm,如果想 ...
- 步步为营-66-Socket通信
1.0 版本 1.1 服务器端 using System; using System.Collections.Generic; using System.Linq; using System.Net; ...
- WebApi的调用-2.后台调用
httpClient调用方式 namespace SOA.Common { //httpClient调用WebApi public class HttpClientHelper { public st ...