前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >创建对象的几种方法及优缺点

创建对象的几种方法及优缺点

作者头像
九旬
发布2020-10-23 15:56:02
9460
发布2020-10-23 15:56:02
举报
文章被收录于专栏:九旬大爷九旬大爷

new Object()

直接通过构造函数创建一个新对象。

代码语言:javascript
复制
var obj = new Object()
//等同于 var obj = {}

使用字面量的方式更简单,其实他俩是一样的。 优点是足够简单,缺点是每个对象都是独立的。

#工厂模式

代码语言:javascript
复制
function createObj(name,age){
    var obj = {};
    obj.name=name;
    obj.age=age;
    return obj
}
var Anson = createObj('Anson', 18)
console.log(Anson)
//{name: "Anson", age: 18}
```js
优点是 可以解决创建多个相似对象的问题,缺点是 无法识别对象的类型。
## 构造函数
```js
function Person(name,age){
    this.name =name;
    this.age=age;
    this.sayName =function (){ alert(this.name) }
}
var person = new Person('小明',13);
console.log(person);
//Person {name: "小明", age: 13, sayName: ƒ}

优点是 可以创建特定类型的对象,缺点是 多个实例重复创建方法

#(构造函数+原型)组合模式

代码语言:javascript
复制
function Person(name, age){
    this.name = name;
    this.age = age;
    Person.prototype.sayName = function (){ alert(this.name) }
 }
var person = new Person('小白',18)
console.log(person);
//Person {name: "小白", age: 18} __proto__ -> sayName: ƒ ()
```js
优点 多个实例引用一个原型上的方法 比较常用
## 动态原型
```js
function Person(name,age){
    this.name=name
    this.age =age
    if(typeof this.sayName != 'function'){
        Person.prototype.sayName = function(){ alert(this.name) }
  }
}
var person = new Person('小红',15)
console.log(person);
//Person {name: "小红", age: 15} 动态创建sayName: ƒ ()

优点 可以判断某个方法是否有效,来决定是否需要初始化原型,if只会在仅在碰到第一个实例调用方法 时会执行,此后所有实例共享此方法,需要注意的一点是,不能重新原型对象。

#寄生构造函数模式

代码语言:javascript
复制
function Person(name,age,job){
    var o=new Object();
    o.name=name;
    o.age=age;
    o.job=job;
    o.sayName=function(){
        console.log(this.name)
    }
    return o;
}
var friend=new Person("her",18,"Front-end Engineer");
friend.sayName();
//her

除了使用new操作符,其他的和工厂函数一样,可以为对象创建构造函数。

#稳妥模式

代码语言:javascript
复制
function Person(name, age){
    var o={};
    o.sayName=function(){ alert(name) }
    return o;
}
var person = ('小亮',24);
person.sayName();//’小亮‘

除了使用person.sayName()之外 ,没有办法在访问到name的值,适合在某些安全执行环景下使用。

#Object.create()

代码语言:javascript
复制
const person = {
  isHuman: false,
  printIntroduction: function () {
    console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
  }
};

const me = Object.create(person);

me.name = "Matthew"; // "name" is a property set on "me", but not on "person"
me.isHuman = true; // inherited properties can be overwritten

me.printIntroduction();
// expected output: "My name is Matthew. Am I human? true"

传入一个原型对象,创建一个新对象,使用现有的对象来提供新创建的对象的__proto__,实现继承。

参考:《JavaScript高级程序设计第三版》、MDN

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • new Object()
  • #工厂模式
  • #(构造函数+原型)组合模式
  • #寄生构造函数模式
  • #稳妥模式
  • #Object.create()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档