__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

 

posted @ 2020-07-22 17:24  毛栗的demo  阅读(101)  评论(0)    收藏  举报