`
javaanswer
  • 浏览: 5242 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类

JavaScript面向对象的程序设计3—组合使用构造函数模式和原型模式

阅读更多

1. 原型对象的问题
    首先,它省略了为构造函数传递初始化参数这一环节,结果所有实例在默认情况下都将取得相同的属性值。
    最大的问题,由其共享的本质所导致的。
        原型中所有的属性是被很多实例共享的,这种共享对于函数非常合适。
        对于那些基本值的属性也还说的过去,因为可以通过为实例添加一个同名的属性屏蔽掉原型中的属性。
        但是,对于包含引用类型值的属性来说,问题就比较突出了。

    function Person() {}
    Person.prototype = {
        constructor : Person,
        name : "answer",
        age : 22,
        job : "Software Engineer",
        friends : ["xhc", "jmn"],
        sayName : function() {
            alert(this.name);
        }
    }
    var person1 = new Person();
    var person2 = new Person();
    person1.friends.push("new");
    alert(person1.friends);    //"xhc,jmn,new"
    alert(person2.friends);    //"xhc,jmn,new"

 一般情况下,不同的实例需要拥有各自不同的全部属性。这个问题,正式很少单独使用原型模式的原因所在。

 

2. 组合使用构造函数模式和原型模式(可作为定义引用类型的一种默认模式)
    创建自定义对象最常见的方式,就是组合使用构造函数模式和原型模式。
    构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。
    因此,每个实例都有各自的一份实例属性的副本,但同时又共享这对方法的引用,最大限度的节省了内存。
    另外这种模式还支持向构造函数传递参数。

    function Person(name, age, job) {
        this.name = name;
        this.age = age;
        this.job = job;
        this.friends = ["xhc", "jmn"];
    }
    Person.prototype = {
        constructor : Person,
        sayName : function() {
            alert(this.name);
        }
    }

 

分享到:
评论

相关推荐

    JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】

    主要介绍了JavaScript 面向对象程序设计,结合具体实例形式详细分析了JavaScript面向对象程序设计中类的创建、实例对象、构造函数、原型等相关概念、原理、用法及操作注意事项,需要的朋友可以参考下

    JavaScript面向对象程序设计中对象的定义和继承详解

    本文实例讲述了JavaScript面向对象程序设计中对象的定义和继承。分享给大家供大家参考,具体如下: 在面向对象的Javascript编程中,希望代码优雅有高效是非常重要的。javascript中不存在类的概念,只有对象。要想把...

    JavaScript面向对象程序设计三 原型模式(上)

    在javaScript面向对象设计一和Javascript面向对象设计二中分别介绍了工厂模式和构造函数模式,以及他们格式的优缺点,今天继续讲解原型模式

    《javascript设计模式》学习笔记二:Javascript面向对象程序设计继承用法分析

    本文实例讲述了Javascript面向对象程序设计继承用法。分享给大家供大家参考,具体如下: 1.关于继承: 百度百科对继承的解释是:继承是指一个对象直接使用另一对象的属性和方法。 (话说百科对于计算机概念的继承的...

    JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】

    这里主要是对《JavaScript高级程序设计》第六章(面向对象的程序设计)的总结,书上的这章至少看了4遍是有的。该章主要讲对象的创建与继承。其中创建对象和继承方式至少6种,再加上一些方法属性,很容易搞得晕头转向...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    第3章 高级面向对象概念 39 3.1 构造函数 39 3.1.1 何时调用构造函数 39 3.1.2 构造函数中有什么 40 3.1.3 默认构造函数 40 3.1.4 使用多个构造函数 41 3.1.5 构造函数的设计 44 3.2 错误处理 44 3.2.1 忽略...

    JavaScript面向对象的程序设计(犯迷糊的小羊)

    本章开始进入JavaScript核心知识点的高级部分——面向对象的程序设计,这一部分的内容将会对对象这一数据类型做进一步的深化理解,并且讲述几种创建对象的设计模式以及JavaScript独特的继承机制; 1.理解对象和面向...

    javascript面向对象程序设计实践常用知识点总结

    本文实例讲述了javascript面向对象程序设计实践常用知识点。分享给大家供大家参考,具体如下: 实践一:原型中的引用类型的属性是共享的 var Person = function(){}; Person.prototype = { info:{ name:Tom } } ...

    在javascript中创建对象的各种模式解析

    最近在看《javascript高级程序设计》(第二版) javascript中对象的创建 •工厂模式 •构造函数模式 •原型模式 •结合构造函数和原型模式 •原型动态模式 面向对象的语言大都有一个类的概念,通过类可以创建多...

    浅析在javascript中创建对象的各种模式

    最近在看《javascript高级程序设计》(第二版) javascript中对象的创建 •工厂模式 •构造函数模式 •原型模式 •结合构造函数和原型模式 •原型动态模式 面向对象的语言大都有一个类的概念,通过类可以创建多...

    简单分析javascript面向对象与原型

    本文主要内容参考来自JavaScript高级程序设计,面向对象与原型章节: 1、工厂模式 ECMAScript 可以通过工厂模式来创建对象: //工厂模式 function createObject(name, age) { var obj = new Object(); //创建对象 ...

    详解JavaScript基于面向对象之创建对象(2)

    接着上文《详解JavaScript基于面向对象之创建对象(1)》继续学习。 4、原型方式  我们创建的每个函数都有一个通过prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和...

    跟我学习javascript的prototype原型和原型链

    每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型...

    JavaScript权威指南第六版

    其中js面向对象程序设计一节讲得很好. 尤其是讲创建js对象的四种方式 1,普通模式. 2,工厂模式. 3,构造函数模式. 4,原型模式. JS底层讲得很深,有助于JQuery更深入的学习..

    Javascript中类式继承和原型式继承的实现方法和区别之处

    其它的面向对象程序设计语言都是通过关键字来解决继承的问题(比如extend或inherit等方式)。但是javascript中并没有定义这种实现的机制,如果一个类需要继承另一个类,这个继承过程需要程序员自己通过编码来实现。 ...

    JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现

    继承 继承是面向对象语言的必备特征,即一个类能够重用另一个类的方法和属性。在JavaScript中继承方式的实现方式主要有以下五种:对象冒充、call()、apply()、原型链、混合方式。 下面分别介绍。 对象冒充 原理:...

    compose:对象组合库

    类的任何扩展都将导致新的类构造函数和原型。 这是为了最大程度地减少引用先前课程的任何人的预期扩展后果。 特征 以下示例以TypeScript语法提供。 该程序包确实可以在JavaScript下工作,但为清楚起见,这些示例仅...

Global site tag (gtag.js) - Google Analytics