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面向对象程序设计继承用法。分享给大家供大家参考,具体如下: 1.关于继承: 百度百科对继承的解释是:继承是指一个对象直接使用另一对象的属性和方法。 (话说百科对于计算机概念的继承的...
这里主要是对《JavaScript高级程序设计》第六章(面向对象的程序设计)的总结,书上的这章至少看了4遍是有的。该章主要讲对象的创建与继承。其中创建对象和继承方式至少6种,再加上一些方法属性,很容易搞得晕头转向...
第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独特的继承机制; 1.理解对象和面向...
本文实例讲述了javascript面向对象程序设计实践常用知识点。分享给大家供大家参考,具体如下: 实践一:原型中的引用类型的属性是共享的 var Person = function(){}; Person.prototype = { info:{ name:Tom } } ...
最近在看《javascript高级程序设计》(第二版) javascript中对象的创建 •工厂模式 •构造函数模式 •原型模式 •结合构造函数和原型模式 •原型动态模式 面向对象的语言大都有一个类的概念,通过类可以创建多...
最近在看《javascript高级程序设计》(第二版) javascript中对象的创建 •工厂模式 •构造函数模式 •原型模式 •结合构造函数和原型模式 •原型动态模式 面向对象的语言大都有一个类的概念,通过类可以创建多...
本文主要内容参考来自JavaScript高级程序设计,面向对象与原型章节: 1、工厂模式 ECMAScript 可以通过工厂模式来创建对象: //工厂模式 function createObject(name, age) { var obj = new Object(); //创建对象 ...
接着上文《详解JavaScript基于面向对象之创建对象(1)》继续学习。 4、原型方式 我们创建的每个函数都有一个通过prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和...
每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型...
其中js面向对象程序设计一节讲得很好. 尤其是讲创建js对象的四种方式 1,普通模式. 2,工厂模式. 3,构造函数模式. 4,原型模式. JS底层讲得很深,有助于JQuery更深入的学习..
其它的面向对象程序设计语言都是通过关键字来解决继承的问题(比如extend或inherit等方式)。但是javascript中并没有定义这种实现的机制,如果一个类需要继承另一个类,这个继承过程需要程序员自己通过编码来实现。 ...
继承 继承是面向对象语言的必备特征,即一个类能够重用另一个类的方法和属性。在JavaScript中继承方式的实现方式主要有以下五种:对象冒充、call()、apply()、原型链、混合方式。 下面分别介绍。 对象冒充 原理:...
类的任何扩展都将导致新的类构造函数和原型。 这是为了最大程度地减少引用先前课程的任何人的预期扩展后果。 特征 以下示例以TypeScript语法提供。 该程序包确实可以在JavaScript下工作,但为清楚起见,这些示例仅...