创建对象的几种模式
来源:互联网 发布:数据库备份与灾难恢复 编辑:程序博客网 时间:2024/05/22 02:29
/***下面是一些创建对象的模式,可反复看*以创建人为例子,人有自己的名字和年龄,并有一个说自己名字和年龄的方法**///模式一:为了避免重复代码如var obj = {....}的代码出现,萌生了最初的工厂模式,缺点:无法获知对象的类型function createPerson(name,age){ // 创建一个对象 var o = new Object(); o.name = name; o.age = age; o.say = function(){ console.log('My name is ' + this.name + "; my age is " + this.age + '.'); } //工厂模式返回封装好的对象 return o;}var sqf = createPerson('shaoqianfei',22);sqf.say();console.log(sqf instanceof Object);// 这是缺陷所在,无法获知类型console.log(sqf instanceof createPerson);//模式二:构造函数模式,用的比较多的,this和new Person()是关键,注意,还没有return.// 构造函数,相当于java中的类function Person(name,age){ // 关键要弄清楚new之后此函数内发生了什么 this.name = name; this.age = age; this.say = function(){ console.log('My name is ' + this.name + "; my age is " + this.age + '.'); };}var person1 = new Person('liuxiang',23);var person2 = new Person('liuxiang2',24);person1.say();console.log(person1 instanceof Object);// 这是相比工厂模式的其中一个优点,可以获知类型console.log(person1 instanceof Person);// 缺点,每次new一个对象,就要在Person()里面重新执行一遍say(),因为person1和person2的say()不相同,而函数也是对象,不信看下面console.log(person1.say == person2.say); //false //所以,这种方式(构造函数方式)在完成同样任务时,却要产生多个say()实例,没有必要这样,没必要在之前就将函数绑定到特定对象//可以采取将函数对象创建到构造函数外面,用变量引用的方法(指针)来达到只需要创建一次方法就ok的目的。见高程第三版p147第5行的函数。//但是呢。由于构造函数的这个缺点,我们又不能完全把函数定义到全局,因为,如果对象的方法很多,那么全局方法也就很多。而且,没有封装好//所以,我们用原型模式可以实现。//模式三: 原型模式console.log("模式三:原型模式,我们先看看之前的原型是怎样的");console.log(Person.prototype.isPrototypeOf(person1)); //Person.proto对象是person1的原型吗?回答: 是的console.log(Object.getPrototypeOf(person1) == Person.prototype); //(ie9+方法)person1的原型对象是不是与Person.prototype指向的对象相等? 是的
0 0
- javascript创建对象的几种模式
- javascript创建对象的几种模式
- 创建对象的几种模式
- js创建对象的几种模式
- JavaScriptc创建对象的几种模式
- JavaScript创建对象的几种模式
- JavaScript创建对象的几种模式
- js创建对象的几种模式
- 创建对象的几种模式
- JavaScript创建对象的几种模式
- [笔记]javascript面向对象 - 创建对象的几种模式
- JavaScript中创建对象的几种模式
- js 创建对象的几种模式举例
- JavaScript中创建对象的几种模式
- JS中创建对象的几种模式
- javascript创建对象的几种常用模式
- JavaScript创建对象的几种模式比较
- JS面向对象的几种创建方式:工厂模式、构造函数模式、原型模式、混合模式、动态原型模式
- Android Design Support Library使用详解
- PAT(甲级)1083
- generator class有哪些
- newInstance传入String 数组 提示Wrong number of arguments
- 增加samba用户提示Failed to add entry for user
- 创建对象的几种模式
- 解决 – java.lang.OutOfMemoryError: unable to create new native thread
- java 日期格式化
- 【HTML】-案例-利用表格制作网页
- 餐饮管理系统中事件的使用
- SQLAlchemy操作MariaDB笔记之四
- System.exit(0)和System.exit(1)区别
- Notepad++使用
- 《php和mysql web开发》笔记——第3章 使用数组