构造函数
1.构造函数时在JavaScript中用,new来调用的函数。
2.如果我们创建对象需要写很多重复的无意义的代码是我们就需要使用构造函数,如下图。
function Person(name,age){
this.name = name,
this.age = age
}
var p1 = new Person("赵家义",22)
var p2 = new Person("骆志海",20)
3.(1)当以new关键字调用时,会创建一个新的储存空间,标记为Person的实例
(2)这时函数体内部的this就指向了该内存
(3)执行函数内部的代码(通过上面可以找到我们给this添加属性就是给实例添加属性)
原型对象
function Person(name, age) {
this.name = name;
this.age = age;
this.say = function() {
console.log('Hello');
};
}
var p1 = new Person('Tom', 18);
p1.say(); // 'Hello'
var p2 = new Person('Jack', 34);
p2.say(); // 'Hello'
console.log(p1.say == p2.say) // false
我们可以看到上面的p1和p2的say打印出来都是hello,但是为什么p1.say == p2.say返回的值时false呢。
这是因为虽然他们答应的值时一样的但是他们的内存地址不同,这就需要开辟很多的储存空间,这会大大的浪费我们的资源,这时原型对象就会帮我们解决这个问题。
1.当一个对象被创建好之后都会有一个prototype属性,这个属性的值是一个对象,我们把这个对象,称之为原型对象。只要在这个对象上添加属性或方法,都可以被函数的实例对象所访问。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.say = function() {
console.log('Hello');
};
var p1 = new Person('Tom', 18);
var p2 = new Person('Jack', 34);
console.log(p1.say === p2.say); // true
此时,我们看到实例 p1
和 实例 p2
的 say
指向同一块内存空间。这是什么原因呢?我们通过控制台的打印结果来看看。