运行程序,解读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.在可执行程序或快捷方式上右键->属性-> ...
随机推荐
- /etc/fstab文件详解【转】
******************************************************************************* 有很多人经常修改/etc/fstab文件 ...
- 关注网页的更新状况,了解最新的handsup 消息.
// 第一部分是网页截图和源码保存 // upon page load. var fs = require("fs"); var resourceWait = 300, maxRe ...
- Go语言规格说明书 之 通道 发送语句(send) 和 接收操作符(receive)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- css之absolute
一.absolute和float有相同的特性,包裹性和破坏性 1.absolute和float的相似(看下面的demo,如果图片在左上角,那么用float和absolute都一样) <!doct ...
- labelImg:no module named pyqt4
最新版的labelImg安装会出错,改变环境变量,在python3.5中就可以了 参考 shaform :https://github.com/tzutalin/labelImg/issues/106
- vue-cli 搭建的项目处理不同环境下请求不同域名的问题
使用 vue-cli 开发项目过程中, 根据开发环境和正式环境不同, 我们往往需要请求不同域名下的后台接口, 这时候, 该怎么去设置, 达到同一种写法可以根据环境不同而自动切换请求域名呢? 本文将会介 ...
- CentOS切换为iptables防火墙并进行相关配置
CentOS切换为iptables防火墙 切换到iptables首先应该关掉默认的firewalld,然后安装iptables服务. 1.关闭firewall: service firewalld s ...
- 利用setTimeout延时器 制作广告自动关闭
模仿广告自动关闭效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Python进行MySQL数据库操作
最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...
- python 全栈开发,Day130(多玩具端的遥控功能, 简单的双向聊天,聊天记录存放数据库,消息提醒,玩具主动发起消息,玩具主动发起点播)
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.3.zip 注意:由于涉及到 ...