天天看点

原型对象(一)

原型对象就是解决构造函数创建对象时的弊端。

每一个构造函数都有一个prototype属性,这个属性指向的就是原型对象

<script>
      function Person(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
      }

      var ldh = new Person("liudehua", 26, "man");
      console.log(ldh); //Person {name: "liudehua", age: 26, sex: "man"}
    //每一个实例对象都有constructor属性,指向产生这个实例的构造函数,这句是错的
    // 每一个实例对象都有constructor属性,其实访问的是原型对象上的constructor。
    //原型最初只包含constructor属性,而该属性也是共享的,因此可以通过对象实例访问。
    console.log(ldh.constructor === Person) //true
    //  Person.prototype.nike = "chuohoa"

    //工厂函数的弊端,构造函数来解决,构造函数的弊端原型对象来解决
    
    //打印原型对象
    console.log(Person.prototype);
    //   原型对象中有constructor,指向构造函数
    console.log(Person === Person.prototype.constructor); //true

    // 调用构造函数创建一个新实例后,
    // 该实例的内部将包含一个指针(内部属性),
    // 指向构造函数的原型对象。
    // ECMA-262第5版中管这个指针叫[[Prototype]]。
    // 虽然在脚本中没有标准的方式访问[[Prototype]],
    // 但Firefox、Safari和Chrome在每个对象上都支持一个属性__proto__
    console.log(Person.prototype === ldh.__proto__)
    //__proto__,这个连接存在于实例与构造函数的原型对象之间,
    // 而不是存在于实例与构造函数之间


    // ldh.__proto__指向的是原型对象
    console.log(ldh.__proto__.constructor === Person) //true


   //ECMAScript 5增加了一个新方法,叫Object.getPrototypeOf(),
   //在所有支持的实现中,这个方法返回[[Prototype]]的值    
   //说人话:也就是指向了原型对象呗,原型对象就是构造函数和实例之间的桥梁。
   console.log(Object.getPrototypeOf(ldh) == Person.prototype)//true
    </script>      
原型对象(一)
原型对象(一)