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 关键字定义方法和属性的更多相关文章

  1. 使用Object类为实例定义方法和属性

    1.1 可以使用 Object 类直接定义个实例,并且为该对象赋属性和方法,例如: var person_1 = { nickName:"xiaowu", age:28, show ...

  2. 使用 prototype 定义方法和属性

    除了可以在类的构造器方法中定义方法和属性外,也可以使用 prototype 定义方法和属性.每个类都有这个属性,该属性是一个静态属性,因此无需实例化,只需使用类引用该属性即可. 1.1 使用 prot ...

  3. javascript笔记07:使用Object类为实例定义方法和属性

    function Person() {} Person.prototype = { nickName:"john", , showInfo:function() { return ...

  4. c# 类成员的定义 定义方法、字段和属性【转】

    c# 类成员的定义 定义方法.字段和属性c#类的成员包括字段.属性和方法.所有成员都有自己的访问级别,用下面的关键字之一来定义:public----成员可以有任何代码访问:private----成员只 ...

  5. JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)

    第一种:对象冒充 function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.col ...

  6. python中类中属性和方法的具体定义方法和使用

    1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...

  7. Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...

  8. ECMA5中定义的对象属性特性和方法

    ECMA5规定了只有内部才有的特性,描述了属性的各种特征,这些特性用于实现JavaScript引擎,因此在Js中不能直接访问他们.为了标识特性,我们一般会他们放入两对方括号中. ECMAScript中 ...

  9. JS function的定义方法,及function对象的理解。

    废话篇: 今天看到了Function的内容,各种晕,各种混淆有木有.简直是挑战个人脑经急转弯的极限啊.不过,最终这一难题还是被我攻克了,哇咔咔.现在就把这东西记下来,免得到时候又忘了就悲催了.... ...

随机推荐

  1. AJAX的get表单请求方式简述

    一般在页面中常用在表单的操作中,请求数据, action : 数据提交的地址,默认是当前页面 method : 数据提交的方式,默认是get方式 get: 把数据名称和数据值用=连接,如果有多个的话, ...

  2. 主机ping虚拟机失败。虚拟机ping主机,可以ping通。

    原文:https://blog.csdn.net/ww1473345713/article/details/51490525 今天打开虚拟机,然后用Xshell远程连接,发现连接不上.按照以下顺序检查 ...

  3. 洛谷 P3801 红色的幻想乡

    题目背景 蕾米莉亚的红雾异变失败后,很不甘心. 题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一 ...

  4. 三十二、CI框架之配置域名和设置默认登陆网站

    一.打开routes.php文件,将$route['default_controller'] = 'login'; 修改成我们需要的内容. 二.修改config.php中的base_url数据 三.L ...

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-repeat

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  6. H5页面,华为手机打开不加载JS的问题

    今天在做H5页面放在其他手机上面都可以刷出列表,但是就是放在华为手机上面刷不出来,怎么想都想不通,后面主管说华为手机的浏览器是严格遵守H5什么鬼东西的,然后其他浏览器做到比较好的,如果有报错就帮我们解 ...

  7. UVA - 1346 Songs (贪心+排序)

    题意:已知每首歌的标号,长度和播放频率,求一种播放顺序,使得最小,并且输出该播放顺序下第t首歌的标号. 分析: 1.长度越短,播放频率越大的歌排在前面,上式越小. 2.s(i)表示的是当前播放顺序下这 ...

  8. C++ Winsock

    由于兼容的问题更新下winsock,有较好的移植性:客户端是非阻塞的,服务器是阻塞的! Win32控制台: 数据收发: 服务器向客户端发送一个txt文本内容和一个结构体数据: 服务器代码: #incl ...

  9. (win32)解决虚拟按键被输入法截获(转)

    源博客地址:http://blog.csdn.net/kencaber/article/details/51417871 响应WM_KEYDOWN消息时发现`~快捷键无效,设置断点发现得到的按键消息根 ...

  10. windows查看所有进程:netstat -ano

    windows查看所有进程:netstat -ano ------------------------------------------------------------------------- ...