资讯专栏INFORMATION COLUMN

浅谈OOP Javascript [1]

xinhaip / 1090人阅读

摘要:工厂模式优点集中实例化,可以传参等缺点分不清属于哪个对象我们先来谈谈优点,看例子集中实例化返回实例化对象返回返回不难看出,工厂模式比上面的例子减少了很多代码。

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中的工厂模式先讲到这里,下一章我们会讲到构造函数,来解决这个问题。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81024.html

相关文章

  • 浅谈 OOP JavaScript [完结章] -- 继承

    摘要:构造函数通过原型继承了构造函数和原型,这就形成了一个链条,通俗的讲就是原型链继承。而且方法只能冒充构造函数里面的属性和方法而无法冒充原型对象里面的属性和方法还有最大的问题就是重复使用。 前言: 写到这里,差不多就把OOP完结了,写了几篇OOP的文章,但是只是略懂皮毛,可能深入的OOP还有很多,但是我感觉写到这里也算是差不多完结了。 继承 继承是面向对象比较核心的概念,其他语言可能实现...

    张利勇 评论0 收藏0
  • 浅谈OOP Javascript [2] -- 构造函数

    摘要:构造函数上一章我们讲了工厂模式,它的缺点就是无法识别到底哪个属于哪个的问题。我们可以用构造函数来解决这个识别问题。来比较构造函数内的值就可以看出到底是什么类型。 构造函数 上一章我们讲了工厂模式,它的缺点就是无法识别到底哪个属于哪个的问题。我们可以用构造函数来解决这个识别问题。 //构造函数 function Create(a,b) { this.a =a; this...

    didikee 评论0 收藏0
  • 浅谈 OOP JavaScript [3] -- 原型

    摘要:上一章我们谈了构造函数,他的唯一特点就是比较了地址不相同,因为大家知道引用类型是比较的引用。也就是说不用在构造函数中定义对象实例,而是直接将这些添加到原型当中。如果构造函数实例里面没有,就去原型里面查找,如果有就立即返回。 上一章我们谈了构造函数,他的唯一特点就是比较了地址不相同,因为大家知道引用类型是比较的引用。我们来谈谈原型。 原型 我们每创建一个函数都有一个原型(prototyp...

    SQC 评论0 收藏0
  • Learning PHP —— 设计模式 | Chap1:浅谈设计模式中的OOP

    摘要:而哈士奇区别于普通狗,又有新的特征逗比,爱捣乱为了保证类之间的松绑定,通常会继承抽象类,而且是浅继承只有一层子类。如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。 为什么使用OOP OOP是一个模块化的过程,目的是为了把复杂问题简单化,一个模块解决一个复杂问题的某一个方面,即一个类应当只有一个职责 OOP区别于顺序式编程与过程式编程,在于: 1.顺序编程...

    SunZhaopeng 评论0 收藏0
  • 浅谈JavaScript中的面向对象

    摘要:面向对象面向对象编程的全称是,简称,面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。面向对象编程的三个主要特征是封装继承多态。 面向对象 面向对象编程的全称是Object Oriented Programming,简称OOP,面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。面向对象编程可以看做是使用一系列对象相互协作的软件设计,面向对象程序设计的目的是在编程中促...

    Magicer 评论0 收藏0

发表评论

0条评论

xinhaip

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<