1.找出对象的构造器----constructor/instanceof

constructor是用模版实例化对象的时候附带的一个额外属性,这个属性指向创建该对象时所使用的javascript构造函数。

用法:

var house = new Accommodation();

house.constructor === Accommodation;    //true

这中比较也可以用关键字instanceof来完成,

var house = new Accommodation();
apartment instanceof Accomodation; //true

2.通过原型添加属性和方法

javascript中的每个函数,即每个构造器,都有一个叫prototype的属性。我们用关键字new来创建一个“类”的对象实例时,实例中所包含的属性和方法都来自prototype。

可以用点标记法和直接量标记法为一个模版的所有对戏那个实例添加自定义的属性和方法。

点标记法:

//定义一个名为Accommodation的构造函数
function Accommodation(){} //为这个“类”添加属性
Accommodation.prototype.floor = 0;
Accommodation.prototype.rooms = 0;
Accommodation.prototype.shareEntrance =false;

直接量标记法:

//定义一个名为Accommodation的构造函数
function Accommodation(){} //通过对象直接量为这个“类”添加属性和方法
Accommodation.prototype = {
floors:0,
rooms:0,
sharedEntrance:false,
lock:function(){},
}

prototype这个属性关键字有一个强大的特性是允许在对戏那个实例已经被创建后继续添加属性和方法,而这些新添加的属性和方法会自动添加到所有对象实例中,不管是已创建的还是将要创建的。

3.通过作用域添加属性和方法

如果将一个变量或函数定义在任何一个函数之外,直接将其放在一个javascript或者HTML文件里,那么这个变量或函数会被添加到全局作用域中,这意味着在代码的任何位置都能够使用该变量或函数,甚至在其他函数体内也可以。

4.上下文和this关键字

使用this的好处:可以随意改变对象的变量名而不用担心对象中方法的行为收到影响。

上下文环境:在大多数情况下指的是函数运行时封装这个函数的那个对象;当不通过任何一个对象单独调用时,上下文环境值得就是全局的window对象。

注意:对象中的潜逃函数其上下文环境是全局的window对象,而非包含它的那个对象,可以在this指向包含这个函数的对象时,将this的值保存在一个变量中,然后在用到该对象时,用这个变量来代替。比如用变量名为:that

  在使用new关键字创建对象时,this执行的值和一般情况下又有区别。this指向的是通过构造函数所创建的那个对象实例。正是因为这个特性,我们得意在构造函数中通过this来设置所有对象实例的属性和方法,而非像之前那样使用prototype关键字。

  结合prototype和this关键字来定义对象实例的属性和方法,其中前者定义方法,后者来定义属性。

5.方法的链式调用

如果希望能够对方法进行链式调用,则需要在“类”中的方法最后通过this关键字返回对象实例的引用即可。

一、javascript中的类的更多相关文章

  1. JavaScript中创建类,赋值给ajax中的data参数

    缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...

  2. JavaScript中的类

          JavaScript类的相关知识 1.例子 /* 例1 */// 定义一个构造函数function Range(from, to){ this.from = from; this.to = ...

  3. Javascript中的类实现

    Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...

  4. JavaScript中定义类的方式详解

    本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的exte ...

  5. JavaScript中的类继承

    JavaScript是一个无class的面向对象语言,它使用原型继承而非类继承.这会让那些使用传统面向对象语言如C++和Java的程序员们感到困惑.正如我们所看到的,JavaScript的原型继承比类 ...

  6. JavaScript中的类数组对象

    在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 一般来说,如果我们有一个对象obj和一个数组a: obj["attr1"];    / ...

  7. 深入理解JavaScript中的类继承

    由于写本文时全部是在编辑器中边写代码边写感想的,所以,全部思想都写在代码注释里面了 // 类继承 //todo.1 extends 关键字 class Animal { constructor(nam ...

  8. 《深入理解ES6》笔记—— JavaScript中的类class(9)

    ES5中的近类结构 ES5以及之前的版本,没有类的概念,但是聪明的JavaScript开发者,为了实现面向对象,创建了特殊的近类结构. ES5中创建类的方法:新建一个构造函数,定义一个方法并且赋值给构 ...

  9. JavaScript中的类式继承和原型式继承

    最近在看<JavaScript设计模式>这本书,虽然内容比较晦涩,但是细品才发现此书内容的强大.刚看完第四章--继承,来做下笔记. 书中介绍了三种继承方式,类式继承.原型式继承和掺元类继承 ...

随机推荐

  1. tcpdump抓取HTTP包

    tcpdump抓取HTTP包 tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 0x4745为"GET&quo ...

  2. centos下建立双机信任关系

    在有些情况下,我们希望在两台centos机器之间建立ssh连接的时候,可以不用输入密码.最常见的情况就是在使用脚本做数据库备份的时候.这种情况下,我们可以通过公钥/私钥来建立双机之间的信任关系. 网上 ...

  3. 安装VS2015历险记

    最近,因为一些需求,需要在家里的笔记本上安装VS2015.本来以为一件很容易的一件事,发现做起来遇到了很多坑. 首先,下载VS2015,这就花费了两三个小时,安装包太大了.下载完,安装.安装不成功,报 ...

  4. 移动wap隐藏的坑

    非原创,只做转载 ------------------------------------------------------------------------------------------- ...

  5. NGUI之UIRoot——屏幕的自适应分辨率的计算

    //原来写在其他博客上的东西,搬迁 预备知识: 要明确的三个概念: 设计分辨率:在编辑器上开发UI使用的分辨率.我们所有的UI都是在这个分辨率下设计制作的. 显示区域分辨率:设备上所显示的UI区域在编 ...

  6. C#中的隐式类型var——详细示例解析

    从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...

  7. Java面试常见知识点总结(二)

    11.构造方法(构造器): 构造方法是一种特殊的方法,具有以下特点.    (1) 构造方法的方法名必须与类名相同.    (2) 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类 ...

  8. python关于分割与拼接的那些事

    1.split分割 基于re模块和正则表达式对象的方法split(),以后再做学习 基于字符串的split()方法 :字符串对象的split()方法也只能处理非常简单的情况,而且不支持多个分隔符,对分 ...

  9. Pugixml一种快速解析XML文件的开源解析库

    Pugixml是一个轻量级的C++ XML开源解析库,DOM形式的解析器.接口和丰富的遍历和修改操作,快速的解析,此外支持XPath1.0实现数据查询,支持unicode编码: 使用Pugixml可通 ...

  10. Git版本控制管理学习笔记5-提交

        这个标题其实有些让人费解,因为会想这个提交是动词还是名称?     提交动作是通过git commit命令来实现的,提交之后会在对象库中新增一个提交对象.提交过程中会发生哪些变化,在上一篇笔记 ...