__proto__ , prototype , constructor
定义方式一:es5通过构造函数
function Animal() { this.name = 'name' } var A1 = new Animal() Animal.prototype.txt = '通过原型对象继承' console.log(A1.txt) // 2, 实例才有 _proto_ 对象,指向原型对象 A1.__proto__ === Animal.prototype //true // 3, 原型对象有一个构造器,constructor。指向构造函数。 Animal.prototype.constructor === Animal //true
Object: 其实就是一个构造函数。
Object.prototype.constructor === Object //true
方式二:es6 提供class关键字
(es5 \ es6):
1,类的数据类型就是函数。typeOf Persion == function 。类指向构造函数。故直接使用new实例化。
2,构造函数的作用就是给实例初始化内容。
3,类的所有方法其实都定义在prototype上了。如下
class Persion { eat() { } } // 相等于 Persion.prototype.eat = function() { }
4,constructor 默认返回this。this默认指向类的实例。故通过this定义的属性和方法,属于实例本身,不属于原型。(hasOwnPeoperty)。
es6最终实现方式:
class Persion { constructor() { this.name = 'name' }
eat(){
} }
Persion.prototype.constructor === Persion var A2 = new Persion() A2.__proto__ === Persion.prototype
es5 与 es6的区别:
1,es6:class定义的方法,不可枚举。es5,可以。Object.keys(Persion.prototype) == ['eat'] //false
浙公网安备 33010602011771号