组合使用构造函数模式和动态原型模式、寄生构造函数模式(创建具有额外方法的特殊数组)

function Bird(name, age) {
    this.name = name;
    this.age = age;
    this.sons = ["Tom", "John"];
    //在sayName()方法不存在的情况下,添加到原型中
    if (typeof this.sayName != "function") {
        Bird.prototype.sayname = function() {
            console.log(this.name);
        };
    }
}
/*
使用动态原型模式时,不能使用对象字面量重写原型,如果在已经创建了实例情况下重写原型,就会出现上一篇文章中提到过的错误。
*/
function SpeArray() {
    var values = new Array();//创建数组
    values.push.apply(values, arguments);//添加值
    values.toPipedString = function() {
        return this.join("|"):
    };
    return values;//返回数组
}
var colors = new SpeArray("red", "blue", "green");
console.log(colors.toPipedString());
//当然在此不能直接修改Array构造函数,且创建一个有特殊方法的数组
//根据此原理可以设计自己的“栈”、“队列”等特殊数据结构。
时间: 2024-10-11 09:18:42

组合使用构造函数模式和动态原型模式、寄生构造函数模式(创建具有额外方法的特殊数组)的相关文章

js17---创建对象:构造函数式和原型组合模式、动态原型模式、稳妥构造函数式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Unt

7中创建对象的方式(工厂模式、构造函数模式、原型模式、动态原型模式等分析)

1.工厂模式 // 定义工厂函数 function createPerson(name, age, hobby) { // 创建一个临时object对象 var obj = new Object(); // 将工厂函数的参数赋值给临时对象 obj.name = name; obj.age = age; obj.hobby = hobby; obj.sayName = function() { console.log("我的名字叫:"+this.name); } // 返回这个包装好的临

寄生构造函数模式创建对象

这个模式可以在特殊的情况下用来为对象创建构造函数 例子一 假设我们想创建一个具有额外方法的特殊数组. 由于不能直接修改Array构造函数(此为使用寄生构造函数模式的原因) function SpecialArray() {     // 创建数组    var values = new Array();     // 添加值    // values.push.apply(values, arguments);    values.push(...arguments);     // 添加方法 

JavaScript之面向对象学习七(动态原型模式和寄生构造函数模式创建自定义类型)

一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可能会感到非常困惑.因为对象在其他oo语言中往往是封装在一块的,而构造函数确是和原型分开的,所以并没有真正意义上的封装,所以动态原型模式正是致力与解决这一问题的一个方案! 动态原型模式将所有的信息都封装在构造函数中(包括原型和实例属性),通过在构造函数中实例化原型(仅在必要的情况下)实现封装,又保持了

组合使用构造函数模式和原型模式和寄生构造函数

chuangjian自定义类型的最常见方式就是组合使用构造函数模式与原型模式,构造函数模式用于定义实力属性,原型模式定义方法和共享的属性. 寄生构造函数: 原来的写法 var array1 = ['1','2'];var array2 = ['1','2','3'];array1.a = function () { alert(this.length);};array1.a();array2.a = function () { alert(this.length);};array2.a(); 与

JS创建对象模式及其对象原型链探究(五):组合使用构造函数模式和原型模式

组合使用构造函数模式和原型模式 构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性. 创建自定义类型的最常见方式,就是组合使用构造函数模式和原型模式. 1.创建对象 // 组合使用构造函数模式和原型模式 function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.friend = ["Jenny", "Court"]; } Person.p

面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function createBlog(

函数创建对象(4)动态原型模式

把所有信息封装在构造函数内,通过在构造函数中初始化原型,保持了同时使用构造函数和原型的优点,通过检查某个应该存放的方法是否有效,来决定是否需要初始化原型.(通过if判断) function Person(name,age,job){ this.name=name; this.age-age; this.job=job; //判断方法是否存在 if(typeof this.sayName!="function"){ Person.prototype.sayName=function(){

创建对象之动态原型模式

动态原型模式把所有信息都封装在了构造函数中,而通过在构造函数中初始化原型(仅在必要的情况下),又保持了 同时使用构造函数和原型的优点:换句话说,可以通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型 function Person(name, age, job) { // 属性 this.name = name; this.age = age; this.job = job; // 方法 if (typeof this.sayName != "function") { Per