原文

  简书原文:https://www.jianshu.com/p/6cb1e7b7e379

大纲

  前言
  1、简单方式创建对象的方法
  2、工厂模式创建对象
  3、构造函数模式创建对象
  4、原型模式创建对象
  5、组合使用构造函数模式和原型模式
  6、动态原型模式创建对象
  7、寄生构造函数模式
  8、稳妥构造函数模式
  9、代码资源

前言

  JavaScript是一门基于对象的语言。
  JavaScript本身包含许多对象,这些对象称之为JavaScript的内建对象。
  有些对象(如:person)在JavaScript语言里并不存在。我们可以利用JavaScript语言来创建自己的对象——术语称之为用户定义对象(user-defined object),也就是所谓的创建对象。
  通过创建自定义对象,可以用来弥补很多内建对象无法做到的事情。

1、简单方式创建对象的方法

  虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复代码。

//1.1、利用对象字面量的方式创建对象
var person = {name: 'kk',age: 12,job: 'IT',say: function () {console.log('hello' + this.name);}
}
console.log(person);//1.2、利用new Object的方式创建对象
var person = new Object();
person.name = 'kk';
person.age = 12,
person.job = 'IT',
person.say = function() {console.log('hello' + this.name);
}
console.log(person);

2、工厂模式创建对象

  工厂模式创建对象的方法是基于基本创建对象的方法上的,是为了解决使用基本创建对象的方法产生大量重复代码的问题而产生的,工厂模式抽象了创建具体对象的过程,通过函数来封装以特定接口创建对象的细节。

function createPerson(name, age, job) {var obj = new Object();obj.name = name;obj.age = age;obj.job = job;obj.say = function () {console.log('hello' + this.name);}return obj;
}var person = createPerson('kk', 12, 'IT');
console.log(person);

3、构造函数模式创建对象

  构造函数在工厂模式创建对象的基础上弥补了工厂模式创建对象的没有识别对象类型的不足,通过构造函数来识别不同构造函数创建不同对象的类型。

function Person(name, age, job) {this.name = name;this.age = age;this.job = job;this.say = function () {console.log('hello' + this.name);}
}
var person = new Person('kk', 12, 'IT');
console.log(person);

4、原型模式创建对象

  构造函数创建对象,通过原型添加对象属性和方法。

function Person() {}
Person.prototype.name = "kk";
Person.prototype.age = 12;
Person.prototype.job = "IT";
Person.prototype.sayName = function () {console.log(this.name);
};var person = new Person();
console.log(person);

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

  构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性。

function Person(name, age, job) {this.name = name;this.age = age;this.job = job;
}
Person.prototype.sayName = function () {console.log(this.name);
}
var person = new Person('kk', 12, 'IT');
console.log(person);

6、动态原型模式创建对象

  动态原型模式把所有信息都封装在了构造函数中,而通过在构造函数中初始化原型(仅在必要的情况下),又保持了同时使用构造函数和原型的优点。

function Person(name,age,job){//属性this.name = name;this.age = age;this.job = job;//方法if(typeof this.sayName != "function"){Person.prototype.sayName = function(){console.log(this.name);}}
}
var person = new Person("kk" , 12, "IT");
console.log(person);

7、寄生构造函数模式

  这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象;但从表面上看,这个函数又很像是典型的构造函数。

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 person = new Person('kk',12,'IT');
console.log(person);

8、稳妥构造函数模式

  所谓稳妥对象,指的是没有公共属性,而且其方法也不可引用this的对象。稳妥对象最适合在一些安全的环境中(这些环境中会禁止使用this和new),或者在防止数据被其他应用程序(如Mashup程序)改动时使用。
  稳妥构造函数遵循与寄生构造函数类似的模式,但有两点不同:一是新创新对象的实例方法不引用this;二是不使用new操作符调用构造函数。

function Person(name,age,job){//创建要返回的对象var o = new Object();o.sayName = function(){return name;};//返回对象return o;
}var person = new Person('kk',12,'IT');
console.log(person);

9、代码资源

  js代码实例中的createObject.js的文件中包含了本篇博客的代码,创建对象的几种实现方式在其中都有包括,希望能对读者有所帮助。

转载于:https://www.cnblogs.com/shcrk/p/9255827.html

JavaScript对象的创建相关推荐

  1. Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现

    JavaScript对象的创建 JavaScript中定义对象的几种方式(JavaScript中没有类的概念,只有对象): 1) 基于已有对象扩充其属性和方法:  [html] view plainc ...

  2. JavaScript对象的创建方式

    JavaScript对象创建 1.直接式 //1.直接创建对象var student = new Object();student.name = "zhangsan";studen ...

  3. JavaScript对象的创建之构造函数

    通过构造函数的方式创建和基于工厂的创建类似,最大的区别就是函数的名称就是类的名称,按照java的约定,第一个字母大写. 使用构造函数创建对象时,在函数内部是通过this关键字来完成属性的定义. fun ...

  4. JavaScript对象的创建总结

    方式 缺点 优点 基于已有对象扩充属性和方法 不可重用,没有约束 无 工厂方法 检测不出是什么的实例 简单封装,可以传参 构造方法 每创建一个对象就有开辟存放方法的空间 能通过instanceof检测 ...

  5. JavaScript对象的创建之动态原型方式

    为了让定义的方式更加符合java的需求,就把定义方法的原型代码放置在Person这个构造函数中. function Person(name,age,friends){//属性在构造函数中定义this. ...

  6. JavaScript对象的创建之外部属性定义方式(基于已有对象扩充其属性和方法)

    var person = new Object(); person.name = "luogk"; person.age = 33; person.say = function() ...

  7. javascript笔记:深入分析javascript里对象的创建(上)续篇

    今天回来一看我的博客居然有这么多人推荐真是开心极了,看来大家对我的研究有了认可,写博客的动力越来越大了,而且我发现写javascript在博客园里比较受欢迎,写java的受众似乎少多了,可能博客园里j ...

  8. JavaScript对象的几种创建方式?

    **` JavaScript对象的几种创建方式? `**

  9. 创建JAVASCRIPT对象3种方法

    创建JAVASCRIPT对象3种方法 方法一:直接定义并创建对象实例 var obj = new Object();    //创建对象实例 //添加属性obj.num = 5;   //添加属性 o ...

最新文章

  1. 通过正则表达式校验手机号码,拿走即用!
  2. NanoPi NEO Air使用十四:FrameBuffer的理解和使用
  3. mysql basedal_spring与MyBatis结合
  4. Leaflet中使用leaflet-search插件实现搜索定位效果
  5. QT 008 UI Add action 的方法
  6. string返回第n个字符_Programming in Lualua学习第13期 Lua字符串库
  7. vs2013 没有ef mysql_vs2013 EF Mysql
  8. opencv判断读取图片是否为空
  9. python爬取收费音乐_想下载的歌曲太多?嫌麻烦?要付费?戳这,帮你解决---Python爬取酷狗音乐...
  10. 如何在屏幕实时显示键盘操作(独家分享)
  11. linux进程关系图谱
  12. kindle导入电子书方法
  13. 关于项目需求进行分析的步骤
  14. arduino 休眠 节能_用 Arduino 自制应急感应灯,给黑夜带来一点光明。
  15. 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐
  16. 从0到1Python数据科学之旅
  17. STM32 SPI+DMA 驱动 SRAM LY68L6400SLIT 应用笔记
  18. 如何在万网购买一个属于自己的域名
  19. [激光原理与应用-30]:典型激光器 -2- 气体激光器 (连续激光器)
  20. 基于simulink的PID控制器设计

热门文章

  1. Javascript模块规范(CommonJS规范AMD规范)
  2. C#委托与事件 简明
  3. 关于程序多开的尝试。CreateMutex,OpenMuxtex,ReleaseMutex
  4. ggplot01:R语言坐标轴离散、连续与图例离散连续的区分
  5. matlab如何配置weka,matlab调用weka
  6. python自动化发送邮件_python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)...
  7. oracle安装清单过不去,oracle 11g(二)安装过程
  8. oracle 查询字段除了as,Oracle中怎样查询数据表的哪个字段是主键
  9. java ios支付接口开发_微信支付接入(Android/IOS(swift)/Java后台)
  10. 怎么做圆一圈圈扩散效果_推广为什么没有效果,网络推广怎么做才有效果?