JavaScript的设计模式(一)-构造器模式

构造器模式

在面向对象编程中,构造器是一个当新建对象的内存被分配后,用来初始化该对象的一个特殊函数。在JavaScript中几乎所有的东西都是对象,我们经常会对对象的构造器十分感兴趣。

对象构造器是被用来创建特殊类型的对象的,首先它要准备使用的对象,其次在对象初次被创建时,通过接收参数,构造器要用来对成员的属性和方法进行赋值。

1.对象创建

/* 创建对象的方法 */
let newObject = {};
// or
let twoObject = Object.create(null);
// or
let threeObject = new Object();

console.log(newObject); //{}
console.log(twoObject); //[Object: null prototype] {}
console.log(threeObject); //{}

2.对象值的设置

/**
 * 对象的赋值
 *  */ 
// 1. 点语法
newObject.test = '我是设置的key';
// 2.方括号语法
newObject['name'] = '我是方括号设置的';
// 3. defineProperty对象设置方法
// 3.1 单属性的设置
Object.defineProperty(newObject,'define',{
    value : '我是方法设置的',
    writable : true, //是否可以重新定义属性
    enumerable : true, //是否能被检举出来  比如循环的时候能不能拿到这个值
    configurable : true, //是否可以删除该属性
});
// 3.2 多属性的设置
Object.defineProperties(newObject,{
    "one" : {
        value : '我的多属性的一',
        writable : true,
        configurable : true,
        enumerable : true,
    },
    "two" : {
        value : '我的多属性的一',
        writable : true,
        configurable : true,
        enumerable : true,
    },

})
/* 
{ test: '我是设置的key',
  name: '我是方括号设置的',
  define: '我是方法设置的',
  one: '我的多属性的一',
  two: '我的多属性的一' }
*/
console.log(newObject); 

3.对象的获取

/**
 * 对象的获取
 */
let obj = {};
// 1. 点语法
obj.test = '我是设置的key';
console.log(obj.test); //我是设置的key
// 2.方括号语法
obj['name'] = '我是方括号设置的';
console.log(obj['name']); //我是方括号设置的

 4.对象创建类

4.1 构造函数

// 在es6以前  JS是没有类这个概念的 是通过构造函数 + new 来创建一个类似类的对象
// 关键字this引用到刚被创建的对象
// 一般类的创建首字母都是大写的
function People(name) {
  this.name = name;
  this.say = function () {
    return this.name + "说了话";
  };
}
let jack = new People("jack"),
    tom = new People("Tom");
console.log(jack.say()); //jack说了话
console.log(tom.say()); // Tom说了话

4.2 构造函数改进

/* 
上述的创建对象有几个弊端
一是难以继承,
二是每个People构造函数创建的对象中,say()之类的函数都被重新定义,
理想的情况是所有People类型的对象都应该引用同一个函数。 通过原型链的形式  因为JS对象都有属于自己的原型链
*/
function People_1(name) {
    this.name = name;
    
};
People_1.prototype.say = function(){
    return this.name + "说了什么话";
}
let jack = new People_1("jack"),
    tom = new People_1("Tom");
console.log(jack.say()); //jack说了什么话
console.log(tom.say()); // Tom说了什么话
/* 
这样创建的话  这个say方法就能被所有继承于 People_1的类所共享使用
*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值