【javascript】函数中的this的四种绑定形式 — 大家准备好瓜子,我要讲故事啦~~
this的默认绑定
function fire () {
console.log(this === window)
}
fire(); // 输出true
function fire () {
// 我是被定义在函数内部的函数哦!
function innerFire() {
console.log(this === window)
}
innerFire(); // 独立函数调用
}
fire(); // 输出true
var obj = {
fire: function () {
function innerFire() {
console.log(this === window)
}
innerFire(); // 独立函数调用
}
}
obj.fire(); //输出 true
this的隐式绑定
var obj = {
a: ,
fire: function () {
console.log(this.a)
}
}
obj.fire(); // 输出1
// 我是第一段代码
function fire () {
console.log(this.a)
}
var obj = {
a: ,
fire: fire
}
obj.fire(); // 输出1
// 我是第二段代码
var obj = {
a: ,
fire: function () {
console.log(this.a)
}
}
obj.fire(); // 输出1
隐式绑定下,作为对象属性的函数,对于对象来说是独立的
var obj = {
a: , // a是定义在对象obj中的属性 1
fire: function () {
console.log(this.a)
}
}
var a = ; // a是定义在全局环境中的变量 2
var fireInGrobal = obj.fire;
fireInGrobal(); // 输出 2
var a = ;
var obj = {
a: , // a是定义在对象obj中的属性
fire: function () {
console.log(this.a)
}
}
function otherFire (fn) {
fn();
}
otherFire(obj.fire); // 输出2
在一串对象属性链中,this绑定的是最内层的对象
var obj = {
a: ,
obj2: {
a: ,
obj3: {
a:,
getA: function () {
console.log(this.a)
}
}
}
}
obj.obj2.obj3.getA(); // 输出3
this的显式绑定:(call和bind方法)
var obj = {
a: , // a是定义在对象obj中的属性
fire: function () {
console.log(this.a)
}
}
var a = ; // a是定义在全局环境中的变量
var fireInGrobal = obj.fire;
fireInGrobal(); // 输出2
fireInGrobal.call(obj); // 输出1
var obj = {
a: , // a是定义在对象obj中的属性
fire: function () {
console.log(this.a)
}
}
var a = ; // a是定义在全局环境中的变量
var fn = obj.fire;
var fireInGrobal = function () {
fn.call(obj) //硬绑定
}
fireInGrobal(); // 输出1
var fireInGrobal = function () {
fn.call(obj) //硬绑定
}
var fireInGrobal = fn.bind(obj);
new绑定
function foo (a) {
this.a = a;
}
var a1 = new foo ();
var a2 = new foo ();
var a3 = new foo ();
var a4 = new foo ();
console.log(a1.a); // 输出1
console.log(a2.a); // 输出2
console.log(a3.a); // 输出3
console.log(a4.a); // 输出4
【javascript】函数中的this的四种绑定形式 — 大家准备好瓜子,我要讲故事啦~~的更多相关文章
- 【javascript】函数中的this的四种绑定形式
目录 this的默认绑定 this的隐式绑定 隐式绑定下,作为对象属性的函数,对于对象来说是独立的 在一串对象属性链中,this绑定的是最内层的对象 this的显式绑定:(call和bind方法) n ...
- 函数中的this的四种绑定形式
目录 this的默认绑定 this的隐式绑定 隐式绑定下,作为对象属性的函数,对于对象来说是独立的 在一串对象属性链中,this绑定的是最内层的对象 this的显式绑定:(call和bind方法) n ...
- this的四种绑定形式
一 , this的默认绑定 当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象. 一个例子 function fire ...
- JavaScript函数中的this四种绑定形式
this的默认绑定.隐式绑定.显示绑定.new绑定 <script> //全局变量obj_value ; //1.window调用 console.log(`*************** ...
- JavaScript高级之函数的四种调用形式
主要内容 分析函数的四种调用形式 弄清楚函数中this的意义 明确构造函对象的过程 学会使用上下文调用函数 了解函数的调用过程有助于深入学习与分析JavaScript代码. 本文是JavaScript ...
- javascript——四种函数调用形式
此文的目的是分析函数的四种调用形式,弄清楚函数中this的意义,明确构造函对象的过程,学会使用上下文调用函数. 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而 ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- PHP从数组中删除元素的四种方法实例
PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...
- 下面介绍mysql中模糊查询的四种用法:
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
随机推荐
- Java 基本语法,标识符,修饰符,关键字
基本语法 编写 Java 程序时,应注意以下几点: 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说,类名的首字母应该大写.如果类 ...
- 删除 $PATH 路径下多余的文件地址
将如下去 多余文件删除就可以了
- Linux S和T权限
S (setuid) 场景: 像修改密码的流程其实就是通过 /usr/bin/passwd 命令对 /etc/passwd进行修改,我们需要修改自己的密码(就是修改/etc/shadow),然而普通用 ...
- 【算法】CRF(条件随机场)
CRF(条件随机场) 基本概念 场是什么 场就是一个联合概率分布.比如有3个变量,y1,y2,y3, 取值范围是{0,1}.联合概率分布就是{P(y2=0|y1=0,y3=0), P(y3=0|y1= ...
- 网络流24题——魔术球问题 luogu 2765
题目描述:这里 这道题是网络流问题中第一个难点,也是一个很重要的问题 如果直接建图感觉无从下手,因为如果不知道放几个球我就无法得知该如何建图(这是很显然的,比如我知道 $1+48=49=7^2$ ,可 ...
- Gradle安装步骤
一. Gralde介绍 Gradle是基于Groovy语言的项目自动化建构工具,在使用Gradle之前常用的构建工具有Ant和Maven,使用这些工具我们可以用来管理项目依赖,打包,部署和发布等.使用 ...
- mysql5.7初始化密码报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before
mysql初始化密码常见报错问题1,mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码 cat /var/log/mysqld.log | grep password1 2 ...
- Service Fabric是什么?
题记:鉴于社区对Service Fabric有诸多误解,希望借本文能让大家正确了解Service Fabric是一个什么东西,算是给其正名. 术语与分类 Service Fabric不仅仅是容器编排器 ...
- 数组实现int随机数的阶乘(避免大数问题)
面试的一道题目,实现int随机数的阶乘.这道题就是考察你考没考虑大数问题,如何避免它. 我能想到的就是用数组去实现,然后写了一下代码.但是当i的值很大,接近Max_value时的情况还没有考虑到. 直 ...
- pygame学习之打印文本
import pygame from pygame.locals import * white = 255, 255, 255 blue = 0, 0, 200 pygame.init() scree ...