下面通过文字详解加代码分析的方式给大家分享下javascript设计模式之对象工厂函数与构造函数的相关知识。
概述使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法。然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象。1).使用工厂函数创建对象我们可以编写一个函数,此函数的功能就是创建对象,可将其.
概述
使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法。
然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象。
1).使用工厂函数创建对象
我们可以编写一个函数,此函数的功能就是创建对象,可将其称为“对象工厂方法”。
复制代码 代码如下:
//工厂函数     
 function createPerson(name, age, job) {         
 var o = new Object();         
 o.name = name;         
 o.age = age;         
 o.job = job;         
 o.sayName = function () {             
 console.info(this.name);         
 };         
 return o;      } //使用工厂函数创建对象     
 var person1 = createPerson('张三', 29, '软件工程师');     
 var person2 = createPerson('李四', 40, '医生');
2).定义对象构造函数
  a).对象构造函数首字母大写
  b).内部使用this关键字给对象添加成员
  c).使用new关键字调用对象构造函数
复制代码 代码如下:
//定义对象“构造”函数      
function Person(name, age, job) { 
this.name = name;         
 this.age = age;          
this.job = job;          
this.sayName = function () {            
  console.info(this.name);          
};      
} //使用new调用对象构造函数创建对象     
 var p1 = new Person('张三', 29, '软件工程师');     
var p2 = new Person('李四', 40, '医生');
以普通方式调用的“构造函数”
构造函数其实也是一个函数,不同之处在于调用它时必须要加一个“new”关键字,如果不加这个关键字,则对它的调用被认为是普通函数调用。
复制代码 代码如下:
 //作为普通函数调用的构造函数,通过this添加的属性,
//成为了window对象的属性与方法。
console.info(window.name);//张三
console.info(window.age); //29
console.info(window.job); //软件工程师
对象构造函数长得这个样:
复制代码 代码如下:
function Person (name) {
this.name = name;
 this.say = function () {
 return "I am " + this.name;
  };
}
实际上是这样(示意):
复制代码 代码如下:
function Person (name) {
// var this = {};
 this.name = name;
 this.say = function () {
return "I am " + this.name;
 };
    // return this;
}
构造函数完成的工作
1. 创建一个新的对象
2. 让构造函数的this引用这一新创建的对象
3. 执行构造函数中的代码,这些代码通常完成向新对象添加属性的工作
4. 向外界返回新创建的对象引用。
对象构造函数与对象工厂方法的区别
1. 对象构造函数中没有显式的对象创建代码
2. 新对象应具备的属性与方法是通过this引用添加的.
3. 对象构造函数中没有return语句
 通常会把对象构造函数的首字母设置为大写的,以区别于普通函数。
对象的constructor属性
a).使用对象工厂函数创建对象,每个对象的constructor属性引用Object()
 复制代码 代码如下:
var person = createPerson('张三', 29, '软件工程师');
 //使用工厂方法创建对象,
其constructor属性引用Object()函数
console.info(person1.constructor === Object); 
//true
b).使用对象构造函数创建对象,每个对象的constructor属性引用这个构造函数
复制代码 代码如下:
var p = new Person('张三', 29, '软件工程师');
//使用对象构造函数创建对象,
//每个对象的constructor属性,引用这个构造函数
console.info(p.constructor === Person);
 //true如何避免“忘记”new"codetitle">复制代码 代码如下:
 //避免忘记new     
 function MyObject(value) 
{         
 if (!(this instanceof arguments.callee))
{             
 //如果调用者忘记加上new了,就加上new再调用一次             
return new MyObject(value);         
 }         
 this.prop = value;     
 }      
//测试      
var obj1 = new MyObject(100);     
 console.info(obj1.prop);//100     
 var obj2 = MyObject(200);        
console.info(obj2.prop); //200
以上内容就是javascript设计模式之对象工厂函数与构造函数详解,希望大家喜欢。
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]
 
                        