资讯专栏INFORMATION COLUMN

面对对象(三)this 关键字

Caizhenhao / 1964人阅读

摘要:涵义实质使用场合使用注意点避免多层避免数组处理方法中的避免回调函数中的绑定的方法参考链接涵义就是属性或方法当前所在的对象。上面代码是一个文本输入框,每当用户输入一个值,就会调用回调函数,验证这个值是否在指定范围。

涵义
实质
使用场合
使用注意点
避免多层 this
避免数组处理方法中的 this
避免回调函数中的 this
绑定 this 的方法
Function.prototype.call()
Function.prototype.apply()
Function.prototype.bind()
参考链接

1.涵义
this就是属性或方法“当前”所在的对象。
只要函数被赋给另一个变量,this的指向就会变。

var A = {
name: "张三",
describe: function () {

return "姓名:"+ this.name;

}
};

var name = "李四";
var f = A.describe;
f() // "姓名:李四"
上面代码中,A.describe被赋值给变量f,内部的this就会指向f运行时所在的对象(本例是顶层对象)。

再看一个网页编程的例子。


上面代码是一个文本输入框,每当用户输入一个值,就会调用onChange回调函数,验证这个值是否在指定范围。浏览器会向回调函数传入当前对象,因此this就代表传入当前对象(即文本框),然后就可以从this.value上面读到用户的输入值。
2.实质

JavaScript 语言之所以有 this 的设计,跟内存里面的数据结构有关系。

var obj = { foo: 5 };
上面的代码将一个对象赋值给变量obj。JavaScript 引擎会先在内存里面,生成一个对象{ foo: 5 },然后把这个对象的内存地址赋值给变量obj。也就是说,变量obj是一个地址(reference)。后面如果要读取obj.foo,引擎先从obj拿到内存地址,然后再从该地址读出原始的对象,返回它的foo属性。

2.1属性结构保存
原始的对象以字典结构保存,每一个属性名都对应一个属性描述对象。举例来说,上面例子的foo属性,实际上是以下面的形式保存的。

{
foo: {

[[value]]: 5
[[writable]]: true
[[enumerable]]: true
[[configurable]]: true

}
}
注意,foo属性的值保存在属性描述对象的value属性里面。

var obj = { foo: function () {} };
这时,引擎会将函数多带带保存在内存中,然后再将函数的地址赋值给foo属性的value属性。

{
foo: {

[[value]]: 函数的地址
...

}
}

2.2函数的this
this,它的设计目的就是在函数体内部,指代函数当前的运行环境。

3.使用场合
(1)全局环境
只要是在全局环境下运行,this就是指顶层对象window
(2)构造函数
构造函数中的this,指的是实例对象
由于this指向实例对象,所以在构造函数内部定义this.p,就相当于定义实例对象有一个p属性
(3)对象的方法
如果对象的方法里面包含this,this的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变this的指向

4.使用注意点
5.避免多层 this
6.避免数组处理方法中的 this
7.避免回调函数中的 this
8.绑定 this 的方法
Function.prototype.call()
Function.prototype.apply()
Function.prototype.bind()
9.参考链接

this.property

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105690.html

相关文章

  • 面对对象this 键字

    摘要:涵义实质使用场合使用注意点避免多层避免数组处理方法中的避免回调函数中的绑定的方法参考链接涵义就是属性或方法当前所在的对象。上面代码是一个文本输入框,每当用户输入一个值,就会调用回调函数,验证这个值是否在指定范围。 涵义实质使用场合使用注意点避免多层 this避免数组处理方法中的 this避免回调函数中的 this绑定 this 的方法 Function.prototype.call...

    shenhualong 评论0 收藏0
  • 面对对象this 键字

    摘要:涵义实质使用场合使用注意点避免多层避免数组处理方法中的避免回调函数中的绑定的方法参考链接涵义就是属性或方法当前所在的对象。上面代码是一个文本输入框,每当用户输入一个值,就会调用回调函数,验证这个值是否在指定范围。 涵义实质使用场合使用注意点避免多层 this避免数组处理方法中的 this避免回调函数中的 this绑定 this 的方法 Function.prototype.call...

    Euphoria 评论0 收藏0
  • 面对对象this 键字

    摘要:涵义实质使用场合使用注意点避免多层避免数组处理方法中的避免回调函数中的绑定的方法参考链接涵义就是属性或方法当前所在的对象。上面代码是一个文本输入框,每当用户输入一个值,就会调用回调函数,验证这个值是否在指定范围。 涵义实质使用场合使用注意点避免多层 this避免数组处理方法中的 this避免回调函数中的 this绑定 this 的方法 Function.prototype.call...

    mengbo 评论0 收藏0
  • java学习() —— 面对对象

    摘要:前言是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。面对对象基本概述概述是基于面向过程的变成思想,是对面向过程的一种封装。面对对象开发就是不断的创建对象,使用对象,指挥对象做事情。面对对象设计其实就是在管理和维护对象之间的关系。 前言 java是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。 面对对象,主要包括:面向对象思想,类与对象及其使用,对象的内存图,成...

    褰辩话 评论0 收藏0
  • 面对对象编程

    摘要:也就是说,构造函数内部,指的是一个新生成的空对象,所有针对的操作,都会发生在这个空对象上。上面代码中,构造函数的语句,返回的是一个新对象。 一、创建对象 1.构造函数var Vehicle = function () { this.price = 1000;}; var v = new Vehicle();v.price // 1000 new命令本身就可以执行构造函数,所以后面的构...

    leeon 评论0 收藏0

发表评论

0条评论

Caizhenhao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<