首页 >

js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)【javascript】

web前端|js教程js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)【javascript】
js面向对象,创建对象
web前端-js教程
在上篇文章给大家介绍了javascript面向对象基础,本篇文章继续深入学习javascript面向对象,JS的语法非常灵活,简单的对象创建就有好几种不同的方法。这些过于灵活的地方有时候确实很让人迷惑,那么今天我们就来梳理一下JS中常用的创建对象的几种方法吧。
开源手机网站源码带后台,ubuntu目录显示乱码,tomcat j2ee6,爬爬虫能吃吗,php如何实现验证码,seo英语全拼lzw
前言
仿商场站源码,ubuntu repo版本管理,python爬虫豆瓣音乐,php xbug,网站代码 seolzw
虽然使用 Object构造函数 或者使用 对象字面量 可以很方便的用来创建一个对象,但这种方式有一个明显的缺点:使用一个接口创建多个对象会产生很多冗余的代码。因此为了解决这个问题,人们开始使用以下几种方式来常见对象。
asp微信接口源码,vscode快捷标签是一行的,ubuntu安装kali,移动tomcat到其他位置报错,怎么用sqlite,中国网页设计最强的人,一个阿里云服务器可以放几个网站,杰奇小说2.0wap插件,前端UI框架原理,爬虫卡通画,php dsn,seo关键词怎么优化,12306网站模板,网页设计的气球特效,thinkphp 模块 模板,手机登陆成功页面模板,数字管理系统模板下载,网站程序安全管理lzw
工厂模式

该模式抽象了创建对象的具体过程,用函数来以特定接口创建对象的细节

 function cPerson(name,sex,age){ var o = new Object(); o.name = name; o.sex = sex; o.age = age; o.show = function(){ console.log(this.name,this.age,this.sex); } return o;} var p1 = cPerson('谦龙','男','100'); p1.show(); var p2 = cPerson('雏田','女','14'); p2.show();
工厂模式测试

工厂方式的问题:使用工厂模式能够创建一个包含所有信息的对象,可以无数次的调用的这个函数。虽然其解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即如何得知一个对象的类型)

构造函数模式

function CPerson(name,sex,age) {//注意这里 构造函数首字母大写 this.name = name; this.sex = sex; this.age = age; this.show = function () { console.log(this.name, this.age, this.sex); }}var p1 = new CPerson('谦龙','男','100'); p1.show();var p2 = new CPerson('雏田','女','14'); p2.show();
构造函数模式测试

注意构造函数与工厂模式有些不同的地方,如下

构造函数首字母大写

没有显式地创建对象

将属性和方法赋值给了 this 对象

没有return语句

而且以这种方式来调用构造函数会大致经历一下 几个步骤

创建一个新的对象

将构造函数的作用域赋值给这个对象(因此this就指向了这个对象)

执行构造函数中的代码(即给新对象添加属性和方法的过程)

返回对象

注意:构造函数其实和普通的函数没有太大的差别,唯一的不同在于调用方式的不同。以下演示不同的几种调用方式

 // 调用方式1 new 方式 var p1 = new CPerson('谦龙','男','100'); p1.show();//谦龙 100 男 // 调用方式2 普通函数调用 CPerson('谦龙','男','100'); window.show()//谦龙 100 男 注意属性和方法会被设置到window对象上 // 调用方式3 在另一个对象的作用域中调用 var obj = new Object(); CPerson.call(obj,'谦龙','男','100'); obj.show(); //谦龙 100 男 在obj的作用域
构造函数的问题:使用构造函数最主要的问题就是每个方法都要在每个实例上重新创建一次,p1与p2的都有show方法,但不是同一个Function的实例,因为function在js中也是一个对象。因此他们共有的show方法并不相等。

原型模式

每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象。而这个对象的用途是 包含可以由 特定类型 的所有 实例 共享的属性和方法。即调用构造函数所创建的那个对象的 原型对象

好处是可以让所有对象的实例共享他的属性的方法。即无需在构造函数中定义实例的信息

 function CPerson(){}CPerson.prototype.name='谦龙';CPerson.prototype.sex='男';CPerson.prototype.age=100;CPerson.prototype.show=function(){ console.log(this.name, this.age, this.sex);}var p1 = new CPerson(); p1.show(); //谦龙 100 男var p2 = new CPerson(); p2.show();//谦龙 100 男 console.log(p1.show == p2.show)//true
以上内容是关于js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式),希望大家喜欢。


js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)【javascript】
  • javascript的函数、创建对象、封装、属性和方法、继承【javascript】
  • javascript的函数、创建对象、封装、属性和方法、继承【javascript】 | javascript的函数、创建对象、封装、属性和方法、继承【javascript】 ...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)【javascript】
  • JavaScript 三种创建对象办法_js面向对象
  • JavaScript 三种创建对象办法_js面向对象 | JavaScript 三种创建对象办法_js面向对象 ...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)【javascript】
  • 跟学习javascript创建对象(类)的8种方法
  • 跟学习javascript创建对象(类)的8种方法 | 跟学习javascript创建对象(类)的8种方法 ...