对于Javascript原型的理解

对于Javascript原型的理解

  我们创建的每一个函数都会有一个prototype属性,这个属性是一个指针,指向的是一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。

   即  function Person( ) {...};   这个函数就有了一个prototype属性,调用这个属性就会指向一个对象,可以暂时理解为空对象。

Person.prototype = { }; 所以我们可以为他添加属性以及方法。

深入的理解原型对象

  当我们创建一个新函数的时候,我们知道会有一个prototype属性随之产生,它指向的是这个函数的原型对象。并且再默认的情况之下,原型对象会自动的获得一个constructor属性,这个属性也是一个指针,它指向的是prototype属性所在的那个函数。

   上面的例子  Person.prototype.constructor = Person;

  在我们定义一个新实例的时候,该实例的内部将包含一个指针(内部属性),指向构造函数的原型。

  例如: var Person1 = new Person( )    这时Person1的内部会产生一个__proto__内部属性,指向构造函数的原型对象。

即 Person1.__proto__ = Person.peototype.

需要注意的是我们虽然可以通过对象实例访问保存在原型中的值,但却不能通过对象实例修改原型中的值。如果我们修改了对象实例中的值,可以再通过delete删除这个实例属性。

hasOwnProperty() 可以检测一个属性是存在与实例中还是存在于原型上。这个方法是从Object当中继承来的,如果属性存在于实例中返回true。

in操作符: 检测一个属性能不能访问的到,如果能返回true,不论这个属性是在实例中还是在原型中。