JavaScript学习(一)Prototype constructor 的个人理解
Prototype原型对象
构造函数有一个prototype属性,指向实例对象的原型对象。通过同一个构造函数实例化的多个对象具有相同的原型对象。经常使用原型对象来实现继承
class Star {
constructor(uname, age) {
this.uname = uname
this.age = age
}
sing(sing) {
console.log(sing);
}
}
let ldh = new Star('刘德华', 20)
let zxy = new Star('张学友', 18)
console.log(ldh);
console.log(zxy);
ldh.sing("冰雨")
zxy.sing("李香兰")
-
同一个类的所有实例都从同一个原型对象上继承属性
-
当且仅当两个对象继承自同一个原型对象时,他们才是属于同一个类的实例
特别说明:只有构造函数才有prototype属性,而构造函数的实例是没有该属性的,也就是说console.log(ldh.prototype)输出的是undefined。在javascript中,每个函数都自动有一个prototype属性,而不是每一个对象拥有prototype属性
原型属性与实例对象的创建与否没有关系,它在对象创建之前就已经存在
constructor属性
原型对象有一个constructor属性,指向该原型对象对应的构造函数
class Star {
constructor(uname, age) {
this.uname = uname
this.age = age
}
sing(sing) {
console.log(sing);
}
}
let ldh = new Star('刘德华', 20)
console.log(ldh);
console.log(ldh.constructor);
proto对象原型
实例对象有一个proto属性即对象原型,指向该实例对象对应的原型对象
class Star {
constructor(uname, age) {
this.uname = uname
this.age = age
}
sing(sing) {
console.log(sing);
}
}
let ldh = new Star('刘德华', 20)
console.log(ldh.__proto__ === Star.prototype); //true