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 Person(name) {  this.name = name  this.getName = function() {    console.log(this.name)  }}var person1 = new Person('jack')
  • 优点:实例可以识别为一个特定类型
  • 缺点:每次创建实例时候,每个方法都会被创建一次

构造函数模式优化

12345678910
function Person(name) {  this.name = name  this.getName = getName}

function getName() {  console.log(this.name)}

var person1 = new Person('jack')
  • 优点:解决每个方法都会被重新创建的问题
  • 缺点:没有很好的封装性

原型模式

123456789
function Person(name) {}

Person.prototype.name = 'jack'Person.prototype.getName() {  console.log(this.name)}

var person1 = new Person('jack')
  • 优点:方法不会重新创建
  • 缺点:所有属性和方法都给共享;不能初始化参数

原型模式优化

12345678910大专栏  js 创建对象的多种方式>11
function Person(name) {}

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

var person1 = new Person('jack')
  • 缺点:重新了原型,丢失了 constructor 属性

原型模式优化

123456789101112
function Person(name) {}

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

var person1 = new Person('jack')
  • 优点: 实例可以通过 constructor 属性找到所属构造函数
  • 缺点: 还是存在原型模式的缺点

组合模式(构造函数模式和原型模式结合)

123456789101112
function Person(name) {  this.name = name}

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

var person1 = new Person('jack')
  • 优点:该共享的共享,该私有的私有

寄生构造函数模式

12345678910111213
function Person(name) {  var obj = new Object()  obj.name = name  obj.getName = function () {    console.log(this.name)  }

  return obj}

var person1 = new Person('jack');console.log(person1 instanceof Person) console.log(person1 instanceof Object)  // true
  • 缺点:对象无法识别,所有实例都指向同一个原型,本质还是工厂模式

原文地址:https://www.cnblogs.com/lijianming180/p/12037687.html

时间: 2024-10-21 00:50:49

js 创建对象的多种方式的相关文章

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

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

js和css多种方式实现隔行变色

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>两种方式让css隔行变色js和css3属性.box li:nth-of-type</title>

js创建对象的最佳方式

1.对象的定义 ECMAScript中,对象是一个无序属性集,这里的"属性"可以是基本值.对象或者函数 2.数据属性与访问器属性 数据属性即有值的属性,可以设置属性只读.不可删除.不可枚举等等 访问器属性是用来设置getter和setter的,在属性名前加上"_"(下划线)表示该属性只能通过访问器访问(私有属性),但并不是说添个下划线就把属性变成私有的了,这只是习惯约定的一种命名方式而已.访问器属性没什么用,原因如下: var book={ _year:2004,

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

// 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;

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创建对象的四种方式以及消耗时间比较

// Property-less object console.time('zoop1'); var zoop = (function (numObjects) { var pooz = Object.create(null); for(var i = 0; i< numObjects; i++) { pooz[i] = Object.create(null); } return pooz; })(1000000); console.timeEnd('zoop1'); // Using Obje

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

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

Android入门——构建UI布局的多种方式

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

js之对象创建方式

js中对象创建方式有多种,最常见的就是调用Object构造函数,下面我们来列举对象的创建的方式 一.Object构造 var Dog = new Object(); Dog.name = "peter"; Dog.bark =function(){ console.log(" my name is "+Dog.name); } Dog.bark();//输出my name is peter 此方法是最常见的生成方式,但不能指定想要的对象类型 二.字面量构造 var