深入之创建对象的多种方式以及优缺点

// 1. 工厂模式
//缺点:对象无法识别,因为原型都指向Object
function pe() {
    var o = new Object();
    o.name = name;
    o.getname = function() {
        console.log(this.name)
    }
    return o
}

// 2. 构造函数模式
// 优点:实例可以识别为一个特定的类型
// 缺点:每次创建实例每个方法都要被创建一次
function Person(name) {
    this.name = name;
    this.getName = function() {
        console.log(this.name);
    };

}
var person = new Person(‘zhansan‘);

// 2.1 构造函数模式优化
// 优点:解决了每个方法都要被重新创建的问题
// 缺点:这叫啥封装……
function Person(name) {
    this.name = name;
    this.getName = getName;

}

function getName() {
    console.log(this.name);
}
var person = new Person(‘zhansan‘);

// 3. 原型模式
// 优点:方法不会重新创建
// 缺点:1. 所有的属性和方法都共享 2. 不能初始化参数
function Person(name) {

};
Person.prototype.name = ‘keivn‘;
Person.prototype.getName = function() {
    console.log(this.name);
};

var person1 = new Person();

// 3.1 原型模式优化
// 优点:封装性好了一点
// 缺点:重写了原型,丢失了constructor属性
function Person(name) {

};
Person.prototype = {
    name: ‘kevin‘,
    getName: function() {
        console.log(this.name);
    }
};

var person1 = new Person();

// 3.2 原型模式优化
// 优点:实例可以通过constructor属性找到所属构造函数
// 缺点:原型模式该有的缺点还是有
function Person(name) {

}

Person.prototype = {
    constructor: Person,
    name: ‘kevin‘,
    getName: function() {
        console.log(this.name);
    }
};

var person1 = new Person();

// 4. 组合模式
// 优点:该共享的共享,该私有的私有,使用最广泛的方式
// 缺点:有的人就是希望全部写在一起,即更好的封装性
function Person(name) {
    this.name = name;
}

Person.prototype = {
    constructor: Person,
    getName: function() {
        console.log(this.name);
    }
};

var person1 = new Person();

// 4.1 动态原型模式
// 注意:使用动态原型模式时,不能用对象字面量重写原型
function Person(name) {
    this.name = name;
    if (typeof this.getName != "function") {
        Person.prototype.getName = function() {
            console.log(this.name);
        }
    }
}

var person1 = new Person();
// 如果你就是想用字面量方式写代码,可以尝试下这种:
function Person(name) {
    this.name = name;
    if (typeof this.getName != "function") {
        Person.prototype = {
            constructor: Person,
            getName: function() {
                console.log(this.name);
            }
        }

        return new Person(name);
    }
}

var person1 = new Person(‘kevin‘);
var person2 = new Person(‘daisy‘);

原文地址:https://www.cnblogs.com/xzma/p/8543434.html

时间: 2024-10-17 11:53:10

深入之创建对象的多种方式以及优缺点的相关文章

js创建对象的多种方式及优缺点

在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染.所以最好的方式就是存储到对象中.下面能我就给大家介绍几种创建对象的方式,并且给大家说一下他们的优缺点 方式一:对象字面量 var obj={ name:"赵云", type:"突进", skill:"抢人头" } 缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高 方式二:

Javascript深入之创建对象的多种方式以及优缺点

1.工厂模式 function createPerson(name) { var o = new Object(); o.name = name; o.getName = function() { console.log(this.name) }; return o; } var person1 = createPerson('kevin') 缺点:对象无法识别,因为所以的实例都指向一个原型 2.构造函数模式 function Person(name) { this.name = name; t

js 创建对象的多种方式

参考: javascript 高级程序设计第三版 工厂模式 12345678910 function (name) { var obj = new Object() obj.name = name obj.getName = function() { console.log(this.name) } return obj} var person1 = createPerson('jack') 缺点:对象无法识别,所有实例都指向同一个原型 构造函数模式 1234567 function Perso

Javascript继承的多种方式和优缺点

本文讲解JavaScript各种继承方式和优缺点. 一.原型链继承 function Parent () { this.name = 'kevin'; } Parent.prototype.getName = function () { console.log(this.name); } function Child () { } Child.prototype = new Parent(); var child1 = new Child(); console.log(child1.getNam

JavaScript中继承的多种方式和优缺点

// 原型链继承 /** * 1. 原型链继承 * 缺点: * 1. 在子类中不能向父类传参 * 2. 父类中所有引用类型的属性会被所有子类实例共享,也就说一个子类实例修改了父类中的某个引用类型的属性时,其他子类实例也会受到影响 */ function Parent() { this.name = "parent"; this.hobby = ["sing", "rap"]; } function Child() { this.type = &q

从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文.(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程) 在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动(Activity),对于之前的界面根据需求进行摧毁(Finish())或则保留. 如果一个交互流程中,是从A开始,按照A - B - C - D - A这样的顺

解析XML的4种方式及优缺点比较

dom, sax是解析xml的底层接口 而jdom和dom4j则是基于底层api的更高级封装    dom是通用的,而jdom和dom4j则是面向java语言的 (方法一). DOM解析说明:为 XML 文档的已解析版本定义了一组接口.解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构.优点:整个文档树在内存中,便于操作:支持删除.修改.重新排列等多种功能:缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间:使用场合:一旦解析了文档还需多次

Android进阶——构建UI布局的多种方式总结

引言 作为Android App,给人第一印象的就是用户界面(UI),简洁友好的UI,自然会给用户优秀的体验,自然很容易就得到用户的认可和赞许,这样App才变得真正的有价值.所以作为开发App的第一步,UI尤为重要,构建UI有很多种方式:xml静态布局.java动态代码.HTML构建(借助WebView)和第三方开源框架等. 一.构成UI的基本元素--View和ViewGroup概述 在Android中绝大部分的UI组件都是存放在android.widget包及其子包.android.view包

从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

http://blog.csdn.net/vipzjyno1/article/details/25423543 前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文.(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程) 在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动(Activity),对于之前的界面根据需求进行摧