资讯专栏INFORMATION COLUMN

细节:js 创建对象的几种模式举例

laznrbfe / 3406人阅读

摘要:工厂模式不推荐应该把方法放在函数的外面,避免重复创建该方法定义的不是构建函数,因该使用方法创建实例,而不是方法不要忘记在函数的最后构造函数模式不推荐使用指代,函数无需明确应该把方法放在函数的外面,避免重复创建该方法原型模式不推荐函数中不对属

工厂模式(不推荐)
var sayName = function(){
    return this.name;
};

function createPerson(name,age){
    var obj = {};
    obj.name = name;
    obj.age = age;
    obj.sayName = sayName;
    return obj;
}

var newPerson = createPerson("Oliver",18);
console.log(newPerson.sayName());

应该把方法放在函数的外面,避免重复创建该方法;

定义的不是构建函数,因该使用var 方法创建实例,而不是new 方法;

不要忘记在函数的最后return obj;

构造函数模式(不推荐)
var sayName = function(){
    return this.name;
};

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

var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());

使用this指代,函数无需明确return;

应该把方法放在函数的外面,避免重复创建该方法;

原型模式(不推荐)
var sayName = function(){
    return this.name;
};

function Person(){};
Person.prototype.name = "Oliver";
Person.prototype.age = 18;
Person.prototype.sayName = sayName;

var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());

函数中不对属性进行定义而是用prototype;

组合使用构造函数模式和原型模式(推荐)
function Person(name,age){
    this.name = name;
    this.age = age;
};

Person.prototype.sayName = function(){
    return this.name;
};

var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());

将所有属性定义在函数中(构造函数方式);将所有方法定义在prototype中(原型方式);

动态原型模式(推荐)
function Person(name,age){
    this.name = name;
    this.age = age;
    if (typeof Person.sayName != "function"){
        Person.prototype.sayName = function(){
            return this.name;
        };
    }
};
var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());

这里判断属性是否为function 以避免重复创建;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78232.html

相关文章

  • 细节js 对象继承几种模式举例

    摘要:原型链继承借用构造函数伪造对象,经典继承无参数有参数组合继承伪经典继承无参数有参数寄生组合式继承引用类型最理想的范式或者可以把函数写成下面这样原型式继承用于共享引用类型的值,与寄生式类似传统版先定义函数,再继承版直接用,再继承省略了定义函数 原型链继承 function Person(){}; Person.prototype = { constructor: Person,...

    Backache 评论0 收藏0
  • 复习笔记(新手向) - JS对象声明几种方式

    摘要:二用操作符构造对象属性名属性值属性名属性值属性名属性值属性名属性值方法名方法名首先用创建一个空对象,然后用多条语句给对象添加属性方法。他的写法与三用函数声明的方式构造对象比较像,但是稍有不同。 -- 新手向知识,就不用ES6写法了。 一、字面量声明 var obj = { 属性名1 : 属性值, 属性名2 : 属性值, 属性名3 : 属性...

    davidac 评论0 收藏0
  • JS创建对象几种设计模式

    摘要:构造函数模式定义构造函数模式是语言创建对象的通用方式。但两种语言用构造函数创建对象的方式略有不同在中没有类的概念,函数即为一等公民,因此,不必显式声明某个类,直接创建构造函数即可,类的方法和属性在构造函数中或原型对象上处理。 工厂模式 定义:工厂模式非常直观,将创建对象的过程抽象为一个函数,用函数封装以特定接口创建对象的细节。通俗地讲,工厂模式就是将创建对象的语句放在一个函数里,通...

    Galence 评论0 收藏0
  • js面向对象浅析---对象创建几种常见方式

    摘要:前言虽然使用构造函数或者使用对象字面量可以很方便的用来创建一个对象,但这种方式有一个明显的缺点使用一个接口创建多个对象会产生很多冗余的代码。即调用构造函数所创建的那个对象的原型对象好处是可以让所有对象的实例共享他的属性的方法。 前言 虽然使用Object构造函数或者使用对象字面量可以很方便的用来创建一个对象,但这种方式有一个明显的缺点:使用一个接口创建多个对象会产生很多冗余的代码。因此...

    Invoker 评论0 收藏0
  • 手撕面试官系列(二):开源框架面试题Spring+SpringMVC+MyBatis

    摘要:跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来期间也没有准备充分,到底是因为技术原因影响自己的发展,偏移自己规划的轨迹,还是钱给少了,不受重视。 跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技...

    Flink_China 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<