任意函数都可以使用new关键字进行调用 通过new使得普通的函数变成了构造函数 通常的话 创建很多同类型的对象的时候可以使用 工厂模式 / 构造函数 模式
其实new操作符偷偷的为我们做了四件事。
1.创建了一个新对象
2.改变this指向让this指向这个空对象
3.调用构造函数 给对象添加属性和方法
4.返回一个新的对象
代码如下:
var arr = new Array(); // 通过new操作符创建了一个新对象
function Person(name, age, gender) {
// var this={}; //改变this指向让this指向这个空对象
this.name = name;
this.age = age; //调用构造函数 给对象添加属性和方法
this.gender = gender;
// return this; //返回一个新的对象
}
继承
继承 : 经典继承/混合继承 /组合式继承
在B构造函数中 借用父构造函数继承父构造函数的属性
代码如下:
function A(name, age) {
this.name = name;
this.age = age;
}
function B(name, age) {
// 借用 (A)父构造函数 继承父构造函数的(name,age)属性
A.call(this, name, age);
}
var b = new B("李四", 12)
console.log(b) // {name: "李四", age: 12}
原型继承:
function A(name, age) {
this.name = name;
this.age = age;
}
function B(name, age) {
// 借用父构造函数 继承父构造函数的属性
A.call(this, name, age);
}
A.prototype.say = function () { //给A构造函数添加prototype原型同时创建一个say()方法
console.log(this.name)
}
B.prototype.say = A.prototype.say; //B的原型等于A的原型 同时包括它的name 和age值
var b = new B('张三', 20);
b.say();