ECMAscript开辟的两种形式:
1.历程化 2.OOP(面向对象)
面向对象的言语有一个标志,那就是类的观点,而经由过程类能够建立恣意多个具有雷同属性的要领的对象。然则ECMAscript中没有类的观点!
又谈作用域
起首我们先建立一个对象:
var createObject = new Object(); //建立一个Object对象
createObject.a = 'abc'; //给对象增加属性
createObject.b = 10; //同上
createObject.c = function () { //给对象增加要领
return this.a + this.b;
//这里的this作用域是createObject下
};
alert(createObject.c()); //返回abc10
不难看出,在实例化createObject下的要领内里,this的作用域是指向自身的!
我们理解了作用域接下来我们继承看,假如我想建立两个一样的要领和属性,就要写许多反复代码,这是程序员最烦的题目。比方我们还要建立一个createObject1:
var createObject1 = new Object(); //建立一个Object对象
createObject1.a = 'abcdef'; //给对象增加属性
createObject1.b = 20; //同上
createObject1.c = function () { //给对象增加要领
return this.a + this.b;
//这里的this作用域是createObject下
};
alert(createObject1.c()); //返回abcdef20
不难看出,两段代码反复代码过量,所以我们就要用工场形式防止实例化对象大批反复题目。
工场形式
长处:集合实例化,能够传参等
瑕玷:分不清属于哪一个对象
我们先来谈谈长处,看例子:
function createObject(a,b){
var obj = new Object(); //集合实例化
obj.a = a;
obj.b = b;
obj.c = function () {
return this.a + this.b;
};
return obj; //返回实例化对象
}
var box = createObject('abc',10);
var box1 = createObject('abcdef',20);
alert(box.c()); //返回abc10
alert(box1.c()); //返回abcdef20
不难看出,工场形式比上面的例子减少了许多代码。集合实例化了对象。用的时刻直接挪用就能够了,而且能够传参。不必在对象属性内部去修正参数。
瑕玷:
没法分清哪一个是哪一个的对象。
//我们来看看检测box,box1的范例
alert(typeof box); //object
alert(typeof box1); //object
WTF?哪一个是哪一个的对象?基础傻傻分不清!许多人说了,那就用instanceof去检测是不是是object实例不就得了?
(instanceof 是用来推断一个变量是不是是某个对象的实例)
alert(box instanceof Object); //true
alert(box1 instanceof Object); //true
事实证明,照样分不清究竟box,box1是谁的实例。
OOP Javascript中的工场形式先讲到这里,下一章我们会讲到组织函数,来处理这个题目。