了解神奇的this
this的用法
在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了.
因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下环境.举例说明
1. 构造函数之this
function Foo() {
this.name = "zhangsan";
this.age = 20;
console.log(this);
}
var f1 = new Foo();
说明:
1. 如果函数作为构造函数使用,那么其中的this就代表它new出来的对象
2. 如果函数作为普通函数调用,这种情况this是指window.
function Foo() {
this.name = "zhangsan";
this.age = 20;
console.log(this);
}
Foo();
console.log(window.name);
console.log(window.age);
2. 函数作为对象的一个属性
如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this指向该对
var obj = {
x:10,
fn:function() {
console.log(this.x);
}
};
obj.fn();
var obj = {
x:10,
fn:function() {
console.log(this.x);
}
};
var obj1 = {
x:20
};
obj1.fn = obj.fn;
obj1.fn();
3. 函数用call或apply调用
当一个函数被call和apply调用时,this的值就去传入的对象的值
var test = "Tony";
function doSomething() {
console.log(this.test);
}
var obj = {
test:"Tom"
};
doSomething();
doSomething.call(obj);//doSomething中的this指向obj
4. 全局&普通函数的调用
在全局环境下,this指向的是window对象
console.log(this === window);//true
普通函数调用时,其中的this也是指向的window对象
var x = 10;
var fn = function() {
console.log(this);//window
console.log(this.x);//10
};
fn();
注意以下情况:虽然函数f是在obj对象内部定义的,但是他任然是一个普通函数,this指向的还是window对象.
var x = 20;
var obj = {
x:10,
fn:function() {
function f() {
console.log(this);
console.log(this.x);
}
f();
}
};
obj.fn();
5. 构造函数prototype
this代表的是当前对象的值,不仅仅是在构造函数的prototype,即便是在整个原型链中.
function Fn(name, age) {
this.name = name;
this.age = age;
}
Fn.prototype.sayName = function() {
console.log(this.name);
};
var f1 = new Fn("zhangsan", 20);
console.log(f1.name);
了解神奇的this的更多相关文章
- BZOJ 1006 【HNOI2008】 神奇的国度
题目链接:神奇的国度 一篇论文题--神奇的弦图,神奇的MCS-- 感觉我没有什么需要多说的,这里简单介绍一下MCS: 我们给每个点记录一个权值,从后往前依次确定完美消除序列中的点,每次选择权值最大的一 ...
- 前端精选文摘:BFC 神奇背后的原理
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- 一行神奇的javascript代码
写本篇文章的缘由是之前群里@墨尘发了一段js代码,如下: (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~ ...
- [翻译svg教程]Path元素 svg中最神奇的元素!
先看一个实例 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999 ...
- php isset( $test ) 的神奇之处。
很久一段时间没更新博客了,由于近段时间一直在忙 挑战杯 的项目,所以没怎样把一些总结放上来.这次,总结下 php 的一个 函数 : boolean isset($test), 返回值:boolean类 ...
- 神奇的CSS3按钮特效
点击这里查看效果 以下是源代码: <!doctype html> <html> <!-- author: @simurai --> <head> < ...
- 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇
上一篇文章说到了.NET中的打印机,在PrintDocument类也暴露一些本质上上的问题,前面也提到过了,虽然使用PrintDcoument打印很方便.对应条码打印机比如斑马等切刀指令,不依赖打印机 ...
- JS开发HTML5游戏《神奇的六边形》(一)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- 神奇的sort()函数
今天来谈一谈sort()函数,sort() 方法用于对数组的元素进行排序,用法为arrayObject.sort(sortby):括号中的为可选参数,准确来说应该是一个函数,这个函数用来规定排序方法, ...
随机推荐
- 记微信开发(自定义回复&关注回复)
记微信开发(自定义回复&关注回复) 记微信开发(自定义回复&关注回复) code: <?php/** * wechat php test *///define your toke ...
- HTML5 canvas 在线画笔绘图工具(三)
组装画板(TDrawBuilder) 在这一小节中我们要把工具条和画板组装起来,让他们可以协同进行工作. 画板通过一个命名为TDrawBuilder来进行组装.在详细讲解TDrawBuilder对象之 ...
- laravel artisan 命令工具
//全局相关 php artisan:显示详细的命令行帮助信息,同 php artisan list php artisan –help:显示帮助命令的使用格式,同 php artisan help ...
- Windows下Node.js开发环境搭建
1.http://nodejs.org/下载node.js运行环境安装 2.打开DOS命令行 .安装express框架 1 >npm install express 末尾显示如下为安装成功 .安 ...
- 致终将火爆的NFC——ISO14443 TypeA
毫无疑问,当NFC终端越来越普及,逐渐成为智能手机标配功能后,我们终将迎来NFC的火爆.国内NFC应用最为广泛的将是TypeA,如Mifare.NFC Tag.移动支付等,所以接下来将主要研究Type ...
- Inno Setup 创建站点,创建虚拟目录
原文 http://hi.baidu.com/0531_sunmiles/item/ce22554ab7d33d0be9350477 下面的这段代码是用Inno Setup 做安装包的时候创建IIS新 ...
- 小巧数据库 Derby 使用攻略
阅读目录 1. Derby 介绍 2. 稍稍配置下环境变量 3. Derby 操作和 Java 访问 回到顶部 1. Derby 介绍 将目光放在小 Derby 的原因是纯绿色.轻巧.内存占用小,分分 ...
- chrome console 调试xpath
chrome console F12->$x(“//title”) [<title>Online Tools for Software Developers (Free)</t ...
- mysql基础:mysql与C结合实例
一个简单的mysql与C的交互,使用了一些mysql的C API! 老鸟掠过,新手能够看看! /****************************************** 本文件学习mysq ...
- 计算(a/b)%c
如果b与c互素,则(a/b)%c=a*b^(phi(c)-1)%c 如果b与c不互素,则(a/b)%c=(a%bc)/b 对于b与c互素和不互素都有(a/b)%c=(a%bc)/b成立