构造函数、原型和原型链(极其重点)
对象的属性和方法被称为成员
首字母要大写
function Star(name, age) {
// 实例成员
this.name = name
this.age = age
this.sing = () => {
console.log("sing");
}
}
let ldh = new Star('ldh', 18)
ldh.sing() // 访问实例成员的方法
Star.sex = 'man' // 添加静态成员的唯一方法
console.log(Star.sex);// 访问静态成员的唯一方法
构造函数的this
每个构造函数的this都是指向实例对象,这里 就是指向 a 这个实例对象。
function Fn(){ this.user = "wakanda forever"; } var a = new Fn(); console.log(a.user); // wakanda forever
概括原型内容
不同的构造函数对应不同prototype对象
同一个构造函数生成的实例对象 的
__proto__
指向相同的prototype不同的构造函数生成的实例对象 的
__proto__
指向不同的prototype
构造函数和原型 prototype
》启用原型原因:
构造函数的实例对象的方法都是相同的
但每个实例都会生成相同的方法,造成资源浪费。
可以用prototype原型优化,节约空间
》解决方案 要记忆
构造函数可通过原型 让所有实例共享方法,节约空间
我们将一些不变的方法直接定义在prototype中,可以让所有的实例都能共享了
(实例对象通过
__proto__
指向prototype对象)(不同构造函数之间的prototype对象是不同的)
// 比较后是false console.log(Star1.prototype === Star.prototype);/