美文网首页
创建对象

创建对象

作者: 今天又不想上班 | 来源:发表于2017-12-07 18:29 被阅读0次

《JavaScript高级程序设计》中“创建对象”的的归纳,只为方便对比而已

一、工厂模式

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 = createPerson("Greg", 27, "Doctor")

优点:解决了创建多个相似对象的问题
缺点:无法解决对象识别问题


二、构造函数模式

function Person(name, age, job) {
    this.name = name
    this.age = age
    this.job = job
    this.sayName = function() {
        alert(this.name)
    }
}

var person1 = new Person("Nicholas", 29, "Software Engineer")
var person2 = new Person("Greg", 27, "Doctor")
// 当作构造函数使用
var person = new Person("Greg", 27, "Doctor")
person.sayName()    // Greg

// 当作普通函数调用
Person("Greg", 27, "Doctor")
window.sayName()    // Greg

// 在另一个对象的作用域中调用
var o = new Object()
Person.call(o, "Kristen", 25, "Nurse")
o.sayName() // Kristen

优点:创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型
缺点:每个方法都要在每个实例上重新创建一遍


三、原型模式

function Person = {}
Person.prototype.name = "Nicholas"
Person.prototype.age = 29
Person.prototype.job ="Software Engineer"
Person.prototype.sayName = function() {
    alert(this.name)
}
var person1 = new Person()
person1.sayName()   // Nicholas
var person2 = new Person()
person2.sayName()   // Nicholas

alert(person1.sayName == person2.sayName)   // true

优点:让所有对象实例共享它所包含的属性和方法


四、组合使用构造函数模式和原型模式

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"]
}
Person.prototype = {
    constructor: Person,
    sayName: function() {
        alert(this.name);
    }
}

PS:使用最广泛、认同度最高的一种创建自定义类型的方法。可以说这是用来定义类型引用的一种默认模式。


五、动态原型模式

通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型。

function Person(name, age, job) {
    // 属性
    this.name = name;
    this.age = age;
    this.job = job;
    // 方法
    if(typeof this.sayName != "function") {
        Person.prototype.sayName = function() {
            alert(this.name);
        }
    }
}

六、寄生构造函数模式

创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后在返回新创建的对象。跟工厂模式一模一样

function SpecialArray() {
    var values = new Array();
    values.push.apply(values, arguments);
    values.toPipedString = function() {
        return this.join("|");
    }
    return values;
}
var colors = new SpecialArray("red", "blue", "green");
alert(colors.toPipedString());
  1. 返回的对象与构造函数或者与构造函数的原型属性之间没有关系,也就是说,构造函数返回的对象与在狗仔函数外部创建的对象没有什么不同。
  2. 不能依赖instanceof操作符来确定对象类型。

七、稳妥构造函数模式

没有公共属性,而且其方法也并不引用this的对象

function Person(name, age, job) {
    var o = new Object()
    o.sayName = function() {
        alert(name);
    }
    return o;
}

相关文章

  • javascript面向对象解析(一)

    创建对象的方式 json对象方式创建对象 Object方式 声明构造函数方式,创建对象 -- 这种创建对象的方式用...

  • JS对象

    JS 创建对象 批量创建对象

  • JavaScript基础—对象

    概论 对象基础 创建对象 利用字面量创建对象: 使用对象 利用new Object创建对象 使用对象方式与上面完全...

  • JS 创建对象的四种方式

    通过对象字面量来创建 通过 new Object() 创建对象 通过工厂函数来创建对象 通过构造函数来创建对象 工...

  • JS笔记-006-JS对象-数字-字符串-日期-数组-逻辑

    JS对象 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象。 创建新对象有...

  • 创建对象

    1. 原始方法 2. 工厂方法 3. 构造函数 4. 原型函数 5. 混合构造函数\原型函数 6. 动态原型方法

  • 创建对象

    工厂方式 缺点:1.无法确定对象的类型(因为都是Object)。2.创建的多个对象之间没有关联。3.这个对象的属性...

  • 创建对象

    在ES5中 我们想创建一个对象,人。 我们想克隆多个相似的人怎么办?需要一个函数(资源)创造一个 对象模版(对象制...

  • 创建对象

    工厂模式发明一种函数,用函数来封装以特定接口创建对象的细节。 构造函数模式 使用new操作符,会经历四个步骤 原型...

  • 创建对象

    第三部分 创建对象 为类分配相应的空间,默认值为0。 id 变量名 = [类名 alloc]; 类名 *变量名 =...

网友评论

      本文标题:创建对象

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