您的位置:首页 > Web前端 > JavaScript

javascript

2016-07-16 17:37 621 查看
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面向对象类型的时候,我们一般遵循以下规则:
因为实例不同而不同的内容,用this关键字声明
无论实例怎样内容完全相同的成员,定义在prototype上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: