美文网首页
Javascript中的this取值

Javascript中的this取值

作者: Anon_0507 | 来源:发表于2018-01-02 16:02 被阅读0次

强调:在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境。

this的取值分四种情况:

1.构造函数:所谓构造函数就是用来new对象的函数。严格来说,所有的函数都可以new一个对象,但有些函数的定义是为了new一个对象,而有些不是。另外注意,构造函数的函数名第一个字母大写(规则约定),例如:Object,Array,Function等。
function Foo(){
this.name = 'xx',
this.age = 1988
console.log(this) //Foo {name:'xx',age:1988}
}
var f1 = new Foo();//new构造函数时this取值为它即将new出来的对象

function Foo() {
this.name = 'xx',
this.age = 1988,
console.log(this) //Window
}
Foo() //直接调用构造函数的时候this取值为window

在构造函数的prototype中,this代表什么??
function Fn() {
this.name = 'xx';
this.year = 1988
}
Fn.prototype.getName = function(){
console.log(this.name);
}
var f1 = new Fn();
f1.getName(); //xx
在Fn.prototype.getName函数中,this执行的是f1对象。因此可以通过this.name获取f1.name的值
其实,不仅仅是构造函数的prototype,即便是在整个原型链中,this代表的也都是当前对象的值。

2.函数作为对象的一个属性
如果函数作为对象的一个属性,并且作为对象的一个属性被调用时,函数中的this指向该对象。
var obj = {
x:10;
fn:function() {
console.log(this); //Object(x:10,fn:function);
console.log(this.x) //10
}
}
obj.fn() //调用时this才取值

如果fn函数不作为obj的一个属性被调用,
var obj = {
x:10;
fn:function(){
console.log(this) //window
console.log(this.x) //undefined
}
}
var fn1 = obj.fn;
fn1() //调用时this开始取值。
如果fn函数被复制到另一个变量中,并没有作为obj的一个属性被调用,那么this的值就是window。

3.函数用call或者apply调用
当一个函数被call和apply调用时,this的值就取传入的对象的值。
var obj = {
x:10
}
var fn = function(){
console.log(this); //Object {x:10}
console.log(this.x) //10
}
fn.call(obj) //调用时this才取值

4.全局或者调用普通函数
在全局环境下,this永远是window
普通函数在调用时,this也是window
var x = 10;
var fn = function(){
console.log(this) //window
console.log(this.x) //10
}
fn();

var obj = {
x:10,
fn:function(){
function f(){
console.log(this) //window
console.log(this.x) //undefined
}
f();
}
}
obj.fn() //调用时this开始取值
虽然函数f是在obj.fn内部定义的,但是它仍然是一个普通函数,this指向window。

相关文章

  • Javascript中的this取值

    强调:在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。因为this的取值是...

  • JavaScript中this取值机制的本质

    很多前端人员对JavaScript中函数this的取值感到迷域,感觉没有一个简单的任何情况都适用的规则,即使有多年...

  • JS(四)数据类型转换

    序言:JavaScript中的取值类型非常的灵活,比如布尔值:当JavaScript期望使用一个布尔值的时候,我们...

  • Number对象

    在 javascript 中整数的最大取值范围是 -2的53次方 ~ 2的53次方 Number 常用的一些方法 ...

  • 解构赋值

    解构赋值语法是JavaScript的一种表达式,可以方便的从数组或者对象中快速提取值赋给定义的变量。 获取数组中的...

  • JavaScript 多级嵌套对象取值

    看下lodash官方用法 _.get(object, path, [defaultValue]) 根据 objec...

  • Flow Typeof类型(Typeof Types)

    Typeof类型(Typeof Types) 获取值的内部类型JavaScript有一个typeof运算符,它返回...

  • javascript

    解构赋值 javascript对象取值方式 方法参数设置默认值 null和undefined的区别 null是一个...

  • 正则表达式

    [] 中括号代表取值范围{} 取值长度,也叫取值位数取值范围在0-9,四位的表达方式{2,4}两位,四位{2,...

  • freemarker最基本操作

    1.声明变量 2.取值 3.bool型取值 4.spring中的配置

网友评论

      本文标题:Javascript中的this取值

      本文链接:https://www.haomeiwen.com/subject/huifnxtx.html