理解类的实现机制
在前面已经讲过,在JavaScript中可以使用function关键字来定义一个“类”。现在介绍
如何为类添加成员。其过程很简单,在函数内通过this指针引用的变量或者方法都会成为类
的成员,例如:

function class1(){
var s=”abc”;
this.p1=s;
this.method1=function(){
alert(“this is a test method”);
}
}
var obj1=new class1();

当通过new class1()获得对象obj1 时,这个对象便自动获得了属性p1和方法method1。
在 JavaScript 中,function 本身的定义就是类的构造函数,结合前面介绍过的对象的性
质以及new操作符的用法,下面来看使用new创建对象的过程。
(1)当解释器遇到new操作符时便创建一个空对象;
(2)开始运行class1 这个函数,并将其中的this指针都指向这个新建的对象;
(3)因为当给对象不存在的属性赋值时,解释器就会为对象创建该属性,例如在class1
中,当执行到this.p1=s 这条语句时,就会添加一个属性p1,并把变量s 的值赋给它,这样
函数执行就是初始化这个对象的过程,即实现构造函数的作用;
(4)当函数执行完后,new操作符就返回初始化后的对象。
通过这整个过程,JavaScript中就实现了面向对象的基本机制。由此可见,在JavaScript
中,function的定义实际上就是实现一个对象的构造器,是通过函数来完成的。这种方式的
缺点是:
l 将所有的初始化语句、成员定义都放到一起,代码逻辑不够清晰,要实现复杂的功
能时往往力不从心。
l 因为每创建一个类的实例,都要执行一次构造函数。所以实际上构造函数中定义的
属性和方法总被重复的创建,例如:
this.method1=function(){
alert(“this is a test method”);
}
这里的method1 每创建一个class1 的实例,都会被创建一次,造成了内存的浪费。下面
一节,将介绍另外一种类定义的机制:prototype 对象,可以解决构造函数中定义类成员带
来的缺点。

JavaScript中类的实现机制的更多相关文章

  1. Javascript中类的实现机制(四)

    一:  理解类的实现机制 在JavaScript中可以使用function关键字来定义一个“类”,如何为类添加成员.在函数内通过this指针引用的变量或者方法都会成为类的成员,例如:function ...

  2. javascript 之 prototype继承机制

    理解Javascript语言的继承机制 javascript没有"子类"和"父类"的概念,也没有"类"(class)和"实例&qu ...

  3. 160930、Javascript的垃圾回收机制与内存管理

    一.垃圾回收机制-GC Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存. 原理:垃圾收集器会定期(周期性 ...

  4. javascript中类的属性研究

    原文:javascript中类的属性研究 本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很 ...

  5. javascript中类式继承和原型式继承的实现方法和区别

    在所有面向对象的编程中,继承是一个重要的话题.一般说来,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合(让一个类继承另一个类可能会导致二者产生强耦合).关于“解耦”是程序设计中另 ...

  6. JavaScript 原型与继承机制详解

    引言 初识 JavaScript 对象的时候,我以为 JS 是没有继承这种说法的,虽说 JS 是一门面向对象语言,可是面向对象的一些特性在 JS 中并不存在(比如多态,不过严格来说也没有继承).这就困 ...

  7. JavaScript大杂烩4 - 理解JavaScript对象的继承机制

    JavaScript是单根的完全面向对象的语言 JavaScript是单根的面向对象语言,它只有单一的根Object,所有的其他对象都是直接或者间接的从Object对象继承.而在JavaScript的 ...

  8. Javascript prototype 及 继承机制的设计思想

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  9. Javascript的异常捕获机制

    這個異常處理機制,之前也只是,但是沒有怎麼用過,用了一次后發現還可以, 和java,python的異常處理機制也很相似 Javascript的异常捕获机制 1.1 基本的try…catch语句 ES3 ...

随机推荐

  1. BigBlueButton的安装

    下来VM文件,打开系统后 sudo apt-get updatesudo apt-get upgradesudo apt-get dist-upgrade sudo apt-get install b ...

  2. svnUbuntu下安装与使用(ZT)

    1.安装包 1.$ sudo apt-get install subversion 2.创建项目目录 $ sudo mkdir /home/xiaozhe/svn $ cd /home/xiaozhe ...

  3. Python文本(字面值)

    Python中的文本是一些内置类型的常量表示方法. 字符串和字节 字符串是一系列的字符序列,Python中用单引号(''),双引号(""),或者三个单引号(''' ''')三个双引 ...

  4. iptables 用法

    又有人攻击服务器了,没有办法又的去防,这里简单介绍一种限制指定IP访问的办法.  单个IP的命令是 iptables -I INPUT -s 59.151.119.180 -j DROP 封IP段的命 ...

  5. # 20145210 《Java程序设计》第05周学习总结

    教材学习内容总结 第八章 异常处理 8.1语法与继承架构 •使用 try.catch •Java中所有信息都会被打包为对象,如果愿意,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理 • ...

  6. Finding Nemo_BFS

    Description Nemo is a naughty boy. One day he went into the deep sea all by himself. Unfortunately, ...

  7. 将List转换成DataTable

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. iBatis框架简介

    一.为啥使用iBatis? 在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不二选择.即使在持久层框架层出不穷 ...

  9. POJ 1269 (直线求交)

    Problem Intersecting Lines (POJ 1269) 题目大意 给定两条直线,问两条直线是否重合,是否平行,或求出交点. 解题分析 主要用叉积做,可以避免斜率被0除的情况. 求交 ...

  10. which和whereis 命令

    which 文件名 whereis  程序名