构造函数和原型
通过构造函数建立对象:
function Star(name, age) {
this.name = 'dengzhu';
this.age = 19;
this.sing = function() {
console.log('我可以唱歌');
}
}
let dz = new Star('邓柱', 19);
let dj = new Star('邓杰', 19);
实例成员和静态成员
//## 实例成员只能通过实例化对象访问 如 name age sing
//## 静态成员只能通过构造函数访问 如
Star.sex = '男';
console.log(Star.sex);
实例成员:构造函数中的属性和方法都是实例成员 只能通过实例化对象访问,不可以通过构造函数来访问
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
构造函数中存在的问题:通过构造函数实例化对象 会 使相同的方法 被多次创建 从而浪费了内存
解决方法构造函数中的原型 Prototype
作用:通过原型分配的函数是共享的
什么是原型:原型对象
原理: 每一个构造函数都有一个原型 原型对象都指向了同一个地址
而每一个实例化对象 都有个一个_proto_ 对象指向 构造函数的原型对象想·
创建实例对象
//原型对象的创建
//原型对象创建的方法 只要是 实例对象都可以调用
Star.prototype.dance = function() {
console.log('moonfoot');
}
dz.dance();
原理:
当某个实例对象调用某个方法时,先查看该实例对象是否有这个方法 在到原型对象中寻找
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
constructor方法
原型对象中存储着constructor方法 用于指向 原来的构造函数
!!!当修改了原来的原型对象,并且是以对象的形式覆盖了原型对象(当用对象在原型对象中添加多个方法时) 需要手动将constructor方法指向构造函数, 实例对象不能够调用这多个方法
//constructor属性 当原型对象被覆盖时需要指向构造函数
Star.prototype = {
constructor: Star,
fly: function() {
console.log('我能飞');
},
walk: function() {
console.log('我能走');
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、
原型链(了解)
构造函数中的this
1.构造函数中的this指向的是 实例对象
2.原型对象中的this 指向的也是实例对象