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

创建对象的几种方式

作者: 小啊美 | 来源:发表于2020-02-23 19:48 被阅读0次
  1. 字面量式(最常用)
var person = {
    name:  'xiaoming',
    age: 18,
    sayHello: function () {
        console.log('hello', this.name)
    }
}
  1. 调用系统的Object构造函数,创建实例对象
var person = new Object();
person.name = 'xiaoming'
person.age = 18
person.sayHello = function () {
  console.log('hello', this.name)
}
  1. 工厂模式
function person (name, age) {
    var obj = new Object()
    obj.name = name
    obj.age = age
    obj.sayHello = function () {
      console.log('hello', this.name)
    }
    return obj
}

var per = person('xiaoming', 18)
  1. 构造函数模式
function Person (name, age) {
    this.name = name;
    this.age = age;
    this.sayHello = function () {
      console.log('hello', this.name)
    }
}

var per = new Person('xiaoming', 18)
per.sayHello()  //输出 hello, xiaoming 

与工厂模式的区别:

  • 没有显式的创建对象
  • 将属性和方法直接赋给了this对象
  • 没有return语句
  1. 原型模式
function Person () {}
Person.prototype.name = 'xiaoming'
Person.prototype.age = 18
Person.prototype.sayHello = function () {
    console.log('hello', this.name)
}

var per1 = new Person()
per1.sayHello()  // 'hello, xiaoming'

var per2 = new Person ()
per2.sayHello()  // 'hello, xiaoming'
  1. 组合使用构造函数模式和原型模式(应用最广泛)
function Person (name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype = {
    constructor: Person,
    sayHello = function () {
        console.log('hello', this.name)
    }
}
var per1 = new Person()
per1.sayHello()  // 'hello, xiaoming'
  1. 动态原型模式
function Person (name, age) {
    this.name = name;
    this.age = age;
    if (typeof this.sayHello !== 'function') {
        Person.prototype.sayHello = function () {
           console.log('hello', this.name)
        }
    }
}

var per = new Person ('xiaoming', 18)
per.sayHello()

注意
if(){}这段代码只会在初次调用函数时才会执行。其中,if 语句检查的可以是初始化之后应该存在的任何属性或方法,不必用一大堆 if 语句检查每个属性和每个方法;只要检查其中一个即可。

  1. 寄生构造函数模式
    基本思想:创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后返回新创建的对象。
function Person (name, age) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.sayHello = function () {
        console.log('hello', this.name)
    }
    return o;
}

var per = new Person('xiaoming', 18);
per.sayHello()  // 'hello, xiaoming'

使用场景:

function CustomArray () {
    var arr = new Array();
    // 添加值
    arr.push.apply(arr, arguments);
    // 添加方法
    arr.toPipedString = function () {
        return this.join('|');
    }
    return arr;
}

var arr = new CustomArray(1,2,3,4,5)
arr.toPipedString()
  1. 稳妥构造函数模式
    稳妥对象指的是没有公共属性,而且其方法也不引用this的对象。
    稳妥构造函数遵循与寄生构造函数类似的模式,不同处为:
    1. 新创建对象的实例方法不引用this;
      2.不使用new操作符调用构造函数;
      稳妥构造函数与工厂模式的不同之处为,其方法不引用this的对象
function Person (name, age) {
  var o = new Object();
  o.sayName = function () {
      console.log(name);
  }
  return o;
}

var per = Person('xiaoming', 18);
per.sayName()

注意:变量per中保存的是一个稳妥对象,用这种模式创建的对象,只能用sayName()访问name的值。
稳妥构造函数模式提供的这种安全性,非常适合在某些安全执行环境下使用,例如:ADsafe(www.adsafe.org)和 Caja(http://code.google.com/p/google-caja/)

相关文章

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

    创建对象的几种方式 字面量方式创建对象 基本写法 ①字面量的方式来创建对象示例 存在的问题 [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/mhrhqhtx.html