使用 this 关键字定义方法和属性
1、方法和属性的定义
属性是类中声明的变量,与其他地方变量的声明基本相同,只是属性必须 this 关键字,并且这里没有var 关键字。
this.age;
在使用时,先是 this 关键字,之后的点语法连接的是方法名,就像是声明一个匿名函数,只不过属于 this 关键字。
参数 arg_1,arg_n等都是该方法使用的参数,参数之间使用逗号隔开,这也被称为参数列表。在参数后的花括号{},即为整个方法的内容。
方法如有返回值,使用 return 返回。
2、属性的初始化
当为类定义一个属性时,可以为属性赋值,称为属性的初始化。属性在定义时也可以没有初始值。
3、在类体内使用 this 关键字
在类内,如果要访问该类定义的方法或属性,必须使用 this 关键字,它表示类的实例自身,使用它可以引用当前代码的类的特定实例。
this 的行为与引用当前类的实例的变量类似。
4、易犯的错误
在方法内嵌入的函数形成一个新的运行环境,在该内嵌函数内使用 this 并不会指向对象的实例,而是指向全局对象 window。
function Foo(){}
Foo.prototype.method = function(){
function test(){
alert(this);
// this 在这个对象里是全局函数
}
test();
}
var foo = new Foo();
foo.method();
要在嵌入的函数内使用 this,那么最好的是用一个中间变量,比如:
function Foo(){}
Foo.prototype.method = function(){
var that = this;
function test(){
alert(that === foo );
//that 在这个函数里是 foo对象
}
test();
}
var foo = new Foo();
foo.method();
对于静态方法,存在相同的问题,使用相同的办法解决。
5、闭包方法(绑定方法)内的 this 关键字
如果在闭包方法中使用 this 关键字要非常小心。闭包方法并不能确保 this 关键字总是引用在其中定义了方法的对象或类。
6、另外一个 使用 this 易犯的错误。
this 指向它执行的环境,如果构造方法不是使用 new 运算符创建实例,而是直接像调用函数那样调用,那么this关键字就不会代表该类的实例。
使用 this 关键字定义方法和属性的更多相关文章
- 使用Object类为实例定义方法和属性
1.1 可以使用 Object 类直接定义个实例,并且为该对象赋属性和方法,例如: var person_1 = { nickName:"xiaowu", age:28, show ...
- 使用 prototype 定义方法和属性
除了可以在类的构造器方法中定义方法和属性外,也可以使用 prototype 定义方法和属性.每个类都有这个属性,该属性是一个静态属性,因此无需实例化,只需使用类引用该属性即可. 1.1 使用 prot ...
- javascript笔记07:使用Object类为实例定义方法和属性
function Person() {} Person.prototype = { nickName:"john", , showInfo:function() { return ...
- c# 类成员的定义 定义方法、字段和属性【转】
c# 类成员的定义 定义方法.字段和属性c#类的成员包括字段.属性和方法.所有成员都有自己的访问级别,用下面的关键字之一来定义:public----成员可以有任何代码访问:private----成员只 ...
- JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)
第一种:对象冒充 function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.col ...
- python中类中属性和方法的具体定义方法和使用
1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...
- Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...
- ECMA5中定义的对象属性特性和方法
ECMA5规定了只有内部才有的特性,描述了属性的各种特征,这些特性用于实现JavaScript引擎,因此在Js中不能直接访问他们.为了标识特性,我们一般会他们放入两对方括号中. ECMAScript中 ...
- JS function的定义方法,及function对象的理解。
废话篇: 今天看到了Function的内容,各种晕,各种混淆有木有.简直是挑战个人脑经急转弯的极限啊.不过,最终这一难题还是被我攻克了,哇咔咔.现在就把这东西记下来,免得到时候又忘了就悲催了.... ...
随机推荐
- 用 ConfigMap 管理配置【转】
Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...
- java#java.util.Date与java.time.LocalDateTime的转换
转换主要通过Instant来进行的. Date date = new Date(); LocalDateTime localDateTime = LocalDateTime.ofInstant(dat ...
- wx地址和腾讯地图
如果只是要获取当前用户的经纬度和打开微信自带的地图 只需要 jsApiList: ["getLocation","openLocation"] // 先获得 w ...
- 009-PHP循环输出数组成员
<?php $Cities[] = "<B>北京</B>"; //等同于$Cities[0] = "北京" $Cities[] = ...
- Flume 1.9.0 的安装(比较简单, 操作也不像老版本那么繁琐了)
之前已经完成了Hadoop集群.Hbase集群.Hive的搭建, 这次来安装一下flume-1.9.0 安装过程 将tar包上传并解压到指定目录, 并修改名称 tar -zxvf apache-flu ...
- 【转载】UnityWebRequest的初步使用及常用方法解析
文章来源:https://blog.csdn.net/qwe25878/article/details/85051911#_35 今天,来学习一下Unity新的网络请求方式UnityWebReques ...
- 关于js中异步问题的解决方案
在js中有一个始终无法绕过的问题,如何优雅地解决异步问题.实际上,js在执行过程中,每遇到一个异步函数,都会将这个异步函数放入一个异步队列中,只有当同步线程执行结束之后,才会开始执行异步队列中的函数, ...
- webservice调试(XML参数)
<![CDATA[ <?xml version="1.0" encoding="UTF-8"?><MsgText> <use ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- Vulkan SDK之Vertex Buffer
A vertex buffer is a CPU-visible and GPU-visible buffer that contains the vertex data that describes ...