美文网首页
创建对象的几种方式

创建对象的几种方式

作者: 胡儒清 | 来源:发表于2018-08-20 14:53 被阅读38次

字面量方式和Object构造函数方式创建对象

var dog1 = {
        name: 'demu',
    age: 3,
    color: 'black'
}
var dog2 = {
    name: 'jiwawa',
    age: 3,
    color: 'zongse'
}

// 用Object构造函数创建对象
var dog3 = new Object();
dog3.name = 'guibin';
dog3.age = 3;
dog3.color = 'zongsejin';

var dog4 = new Object();
dog4.name = 'jinmao';
dog4.age = 3;
dog4.color = 'huangse';

优点: 方便
缺点: 当需要创建很对对象的时候,会有很多重复的代码

工厂模式

function madeDog(name, age, color) {
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.color = color;
    return obj;
}

var jiwawa = new MadeDog('jiwawa',2,'white');
console.log('jiwawa',jiwawa);

var jinmao = new MadeDog('jinmao',2,'yellow');
console.log('jinmao',jinmao);

优点: 解决了字面量方式创建很多类似的对象的问题
缺点: 没有解决对象识别的问题,就是所有对象的爹都是Object

构造函数的方式

原型模式

function Person() {
    
}
Person.prototype = {
    name: 'zhansan',
    age: 18,
    friends: ['lisi','wangwu']
}
var person1 = new Person();
var person2 = new Person();
// 识别对象
person1 instanceof Person; // true

person1.friends.push('chenliu');
console.log(person2.friends); // ['lisi','wangwu','chenliu']

优点: 解决了对象的归属问题
缺点:

  1. 原型上的属性都是共享的,一个实例去修改了原型上的属性,会影响到别的实例
  2. 不能传参

构造函数和原型模式组合创建对象

function Person(name, age) {
    this.name = name;
    this.age = age;
    this.friends = ['李四','王五'];
}
Person.prototype = {
    say: function() {
        console.log(this.name);
    }
}
var person1 = new Person();
var person2 = new Person();
// 识别对象
person1 instanceof Person; // true

person1.friends.push('陈六');
console.log(person1.friends); // ['李四','王五','陈六']
// person1修改了对象属性,不影响person2
console.log(person2.friends); // ['李四','王五']

寄生构造函数模式

function Person() {
    this.class = "人类";
}
function Person(name, age) {
       // 创建的对象寄生在person上面 
    var obj = new Person();
    obj.name = name;
    obj.age = age;
    obj.say = function() {
        console.log(this.name);
    }
    return obj;
}

var p = new Person('zhansan',5);
p.say();

寄生式跟工厂模式几乎一样,它的优点在于不会破坏原有对象的属性和方法,又能扩充功能

稳妥构造函数模式

function Person() {
    var name = '张三丰';
    var age = 100;
    
    var obj = new Object();
    obj.getName = function() {
        return name;
    }
    obj.setName = function(newName) {
        name = newName;
    }
    return obj;
}

var p = new Person();

优点: 只能通过getName和setName去访问和设置变量

相关文章

  • 字面量方式及内置构造函数创建对象

    创建对象的几种方式 字面量方式创建对象 基本写法 ①字面量的方式来创建对象示例 存在的问题 [01] 代码复用性差...

  • 16、Java创建对象有几种方式?

    Java创建对象有几种方式? java中提供了以下四种创建对象的方式: 1、new创建新对象; 2、通过反射机制;...

  • 创建对象的几种方式

    字面量方式和Object构造函数方式创建对象 优点: 方便缺点: 当需要创建很对对象的时候,会有很多重复的代码 工...

  • 创建对象的几种方式

    第一种:对象字面量的方式 第二种:创建Object实例: 第三种:数构造函数无参数构造函数 带参数的构造函数 第四...

  • 创建对象的几种方式

    真是百看不如一练啊 /*var box= new Object(); //创建一个对象 box.name= "xi...

  • 创建对象的几种方式

    字面量创建对象 new Object() 创建对象 工厂模式 构造函数 原型 混合

  • 创建对象的几种方式

    字面量式(最常用) 调用系统的Object构造函数,创建实例对象 工厂模式 构造函数模式 与工厂模式的区别: 没有...

  • 创建对象的几种方式

    1.工厂模式 就像工厂里做好的模具厂一样,一个一个的返回 2、构造函数式 这种方式会经历四个步骤1.创建一个新对象...

  • 创建对象的几种方式

    1.工厂模式 使用方式 2.构造函数(缺点:每个方法需要在原型上构建一遍,重复) 使用方式及测试 3.原型模式(原...

  • 原型链相关问题

    创建对象有几种方法 使用对象字面量的方式创建 使用构造函数创建对象 使用Object.create()方法创建 原...

网友评论

      本文标题:创建对象的几种方式

      本文链接:https://www.haomeiwen.com/subject/vvfliftx.html