javascript

来源:互联网 发布:网络统考时间 编辑:程序博客网 时间:2024/06/16 07:46

1.其实很多人认为js是一门解释性语言,但实际它是一门编译语言,只是与传统编译语言有所不同而已,这里不再细说.......

2.js面向对象

封装

继承

多态

JavaScript是一款基于原型模式的面向对象语言

为了更好达到封装效果,可以通过一个function来统一构建一个势力

function test(name,age){        return {            name : name,            age : age,            male: false,            startWork : function(){                // code here;            }        };    };
这样更像构造函数:

 function test(name,age){        this.name = name;        this.age = age;        this.male= false;
<span style="white-space:pre">this.startWork = function(){<span style="white-space:pre"></span>if(this.isWorking) return;<span style="white-space:pre"></span>this.isWorking = true;<span style="white-space:pre"></span>};</span>    }     //通过new关键字实例化    var tom = new test("tom", 24);

var zs=new test("zs",34);

document.write(tom.startWork == zs.startWork) //false

我们还可以发现tom和zs的startWork并不指向不一个内存,也就意味着,当我们有很多实例的时候,内存开销会非常大

仅仅通过构造函数创建实例,他们的成员并不共用,很明显这不是一个好的实现方法。

prototype:原型。任何类型都会有属于自己的原型,并且原型上定义的成员,可以在每个实例中引用,并且是共用的

<pre name="code" class="javascript">function worker(name, age){this.name = name;this.age = age;    this.isWorking = false;}worker.prototype.startWork = function(){if(this.isWorking) return;    this.isWorking = true;};worker.prototype.endWork = function(){if(this.isWorking) return;    this.isWorking = true;};//在此处尝试定义一个endWork方法var tom = new worker("tom", 40);var jim = new worker("jim",20);
tom.startWork == jim.startWork //true
</pre><pre>

那么在设计JavaScript面向对象类型的时候,我们一般遵循以下规则:

  1. 因为实例不同而不同的内容,用this关键字声明
  2. 无论实例怎样内容完全相同的成员,定义在prototype上







1 0
原创粉丝点击