js关于创建对象的几种模式

工厂模式:js中是没有类的概念,就通过用函数来封装以特定接口来创建对象,为对象添加属性和方法,然后返回对象,这种模式可以解决创建多个相似对象写大量重复代码的问题,但是它却不能解决对象识别的问题。

function createrPerson(name,age){
                var o = new Object();
                o.name = name;
                o.age = age;
                o.sayName = function(){
                    alert(this.name);
                };
                return o;
            }
            var person1 = new createrPerson("aaa",18);
            var person2 = new createrPerson("bbb",8);

            person1.sayName();
            person2.sayName();

构建函数模式:构造函数可以用来创建特定类型的的对象(原生和自定义),可以向创建内置对象实例一样使用new操作符,此模式可以通过instanceof检测对象类型,这是超过工厂模式的地方,但是它是缺点是构造函数里的方法在每个实例上都会创建一次,因为它的每个成员都无法得到复用。注意这两段代码的区别

function createrPerson(name,age){
                this.name = name;
                this.age = age;
                this.sayName = function(){
                    alert(this.name);
                };
            }
            var person1 = new createrPerson("aaa",18);
            var person2 = new createrPerson("bbb",8);

            person1.sayName();
            person2.sayName();

原型模式:使用构造函数的prototype属性来指定那些应该共享的属性和方法,这样person1和person2实例都共享了同一个sayname方法,所以在最后一行是打印true,

这是与构造函数不同的地方。但是这种模式对于包含有引用类型的属性就有问题了,因为是共享的,如果想改变一个实力的属性,而其他的实力也会随时被更改。

function Person(){}
Person.prototype.name = "aaa";
Person.prototype.age = 18;
Person.prototype.sayName = function(){
alert(this.name);
};

var person1 = new Person();
person1.sayName();
var person2 = new Person();
person2.sayName();
alert(person1.sayName == person2.sayName);

组合模式:是结合构造函数和原型模式的,使用构造函数定于实力属性,用原型定义共享属性和方法。这样就保证了每个实例都有自己的属性

function Person(name,age){
                this.name = name;
                this.age = age;
                this.friends = ["ccc","ddd"];
            }
            Person.prototype = {
                constructor : Person
                sayName : function(){
                    alert(this.name);
                }
            }
            var person1 = new Person("aaa",12);
            var person2 = new Person("bbb",3);
            person1.friends.push("eee");
            alert(person1.friends);
            alert(person2.friends);
            alert(person1.friends === person2.friends);
            alert(person1.sayName === person2.sayName);
时间: 2024-12-10 09:16:36

js关于创建对象的几种模式的相关文章

js创建对象的几种模式

//javaScript创建对象的几种模式特点 /*//1 工厂模式function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=function() { alert(name); }} createPerson("Tom",18,"Teachaer");createPerson("Jack",20,"Student"

JavaScript中创建对象的几种模式

看了js高级程序设计的第六章,很多知识.关于创建对象的几种模式,这里记录一下. 1.工厂模式 1 function createPerson(name, age, job) { 2 var o = new Object(); 3 o.name = name; 4 o.age = age; 5 o.job = job; 6 o.sayName = function() { 7 return this.name; 8 }; 9 return o; 10 } 没有解决对象识别的问题,不能知道一个对象的

javascript 创建对象的7种模式

使用字面量方式创建一个 student 对象: 1 var student = function (){ 2 name : "redjoy", 3 age : 21, 4 sex: women, 5 sayName: function(){ 6 alert(this.name); 7 } 8 }; 使用Object.defineProperties() 方法给对象添加属性:(只有IE9+,FF4+,SF5+,OP 12+,Chrome支持) 1 var student = {}; 2

第164天:js方法调用的四种模式

js方法调用的四种模式 1.方法调用模式 1 function Persion() { 2 var name1 = "itcast", 3 age1 = 19, 4 show1 = function() { 5 console.log(this.name); 6 }; 7 8 return { 9 age : age1, 10 name : name1, 11 show : show1 12 }; 13 } 14 15 var p = new Persion(); 16 p.show(

浅谈 JS 创建对象的 8 种模式

Objct 模式 工厂模式 构造器模式 通过 Function 对象实现 prototype 模式 构造器与原型方式的混合模式 动态原型模式 混合工厂模式 1.Object 模式 var o1 = {};//字面量的表现形式 var o2 = new Object; var o3 = new Object(); var o4 = new Object(null); var o5 = new Object(undefined); var o6 = Object.create(Object.prot

javascript创建对象的几种模式

虽然Object构造函数或者对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象会产生大量的重复代码.为了解决这个问题,人们开始使用工厂模式的一种变体. 1.工厂模式 function createPerson(name, age, job){ var o=new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; retu

javascript面向对象系列第二篇——创建对象的5种模式

× 目录 [1]字面量 [2]工厂模式 [3]构造函数[4]原型模式[5]组合模式 前面的话 如何创建对象,或者说如何更优雅的创建对象,一直是一个津津乐道的话题.本文将从最简单的创建对象的方式入手,逐步介绍5种创建对象的模式 [1]对象字面量 一般地,我们创建一个对象会使用对象字面量的形式 [注意]有三种方式来创建对象,包括new构造函数.对象直接量和Object.create()函数,详细情况移步至此 var person1 = { name: "bai", age : 29, jo

创建对象的几种模式

1.工厂模式 function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var person1=createPerson("Nicholas",29,"Software Engineer"); var person2=createPe

javascript面向对象系列——创建对象的5种模式

如何创建对象,或者说如何更优雅的创建对象,一直是一个津津乐道的话题.本文将从最简单的创建对象的方式入手,逐步介绍5种创建对象的模式 对象字面量 一般地,我们创建一个对象会使用对象字面量的形式 [注意]有三种方式来创建对象,包括new构造函数.对象直接量和Object.create()函数 var person1 = { name: "bai", age : 29, job: "Software Engineer", sayName: function(){ aler