首页 > 编程语言 > 详细

Javascript中的this指向问题

时间:2019-11-30 23:21:43      阅读:107      评论:0      收藏:0      [点我收藏+]

一、普通函数调用(默认绑定)

// 非严格模式
var name = ‘window‘;
var doSth = function(){
    console.log(this.name);
}
doSth(); // ‘window‘

window.doSth并不是调用的才指向window,而是因为上述代码在ES5中,全局变量是挂载在顶层对象的(浏览器是window),但若改为ES6,则结果不同。

let name = ‘window‘;
let doSth = function(){
    console.log(this === window);
    console.log(this.name);
}
doSth(); // true   undefinded

let没有给顶层对象中(浏览器是window)添加属性,window.name和window.doSth都是undefined

 

当使用严格模式的时候,普通函数的this则不同,表现为undefined。

// 严格模式
‘use strict‘
var name = ‘window‘;
var doSth = function(){
    console.log(typeof this === ‘undefined‘);
    console.log(this.name);
}
doSth(); // true,// 报错,因为this是undefined

上述表现即是默认绑定  可在《你不知道的JavaScript》中查阅。

 

二、对象中的方法调用模式

var name = ‘window‘;
var doSth = function(){
    console.log(this.name);
}
var student = {
    name: ‘恒若‘,
    doSth: doSth,
    other: {
        name: ‘other‘,
        doSth: doSth,
    }
}
student.doSth(); // ‘恒若‘
student.other.doSth(); // ‘other‘
// 用call类比则为:
student.doSth.call(student);
// 用call类比则为:
student.other.doSth.call(other);

若将对象中的函数赋值成一个变量,则会变成普通函数(默认绑定)

var studentDoSth = student.doSth;
studentDoSth(); // ‘window‘
// 用call类比则为:
studentDoSth.call(undefined);

 未完待续...

 

 

 

 

 

Javascript中的this指向问题

原文:https://www.cnblogs.com/hengruo/p/11964115.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!