构造器模式
在面向对象编程中,构造器是一个当新建对象的内存被分配后,用来初始化该对象的一个特殊函数。在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的类所共享使用
*/