浅谈OOP Javascript [1]

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了浅谈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中的工厂模式先讲到这里,下一章我们会讲到构造函数,来解决这个问题。

脚本宝典总结

以上是脚本宝典为你收集整理的浅谈OOP Javascript [1]全部内容,希望文章能够帮你解决浅谈OOP Javascript [1]所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。