浅谈OOP Javascript [1]

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中的工场形式先讲到这里,下一章我们会讲到组织函数,来处理这个题目。

    原文作者:Brian_Lee
    原文地址: https://segmentfault.com/a/1190000007596410
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞