分析一下,上面这个例子!咱们能够知道 People的类型是一个对象! 按照javascript的说法,function定义的这个Person就是一个Object(对象),并且仍是一个很特殊的对象,这个使用function定义的对象与使用new操做符生成的对象之间有一个重要的区别。这个区别就是function定义的对象有一个prototype属性,使用new生成的对象就没有这个prototype属性,咱们通常称为普通对象! 咱们须要理解记忆如下的逻辑顺序: Person是一个对象,它有一个prototype的原型属性(由于全部的对象都一prototype原型!)prototype属性有本身的prototype对象,而pototype对象确定也有本身的constuct属性,construct属性有本身的constuctor对象,神奇的事情要发生了,这最后一个constructor对象就是咱们构造出来的function函数自己! 2、这样绕人的逻辑,总想一探究竟,要记得这是一种规定的逻辑思惟,咱们要作的是慢慢接受这种逻辑思惟!咱们不理论研究,用实例说话:javascript
3、下面咱们难免有了疑问,学这么绕的东西干什么,它给咱们最实际的用处就是咱们能够用原型来建立对象的属性和方法!咱们不用它不也是能够建立属性和方法!这里是有区别的,既然不同就有存在的价值! 咱们能够经过给原型添加属性和方法来给给对象添加属性或方法! Hero.prototype.name; Hero.prototype.sayMe = function(){"添加对象的方法其实就是添加函数"} 让咱们再深一步:当咱们给对象添加了同名的属性或方法时会发生什么?java
咱们验证了这个例子获得获得了一些结论: 当函数对象自己的属性或方法与原型的属性或方法同名的时候: 一、默认调用的是函数对象自己的属性或方法. 二、经过原型增长的属性或方法的确是存在的. 三、函数对象自己的属性或方法的优先级要高于原型的属性或方法. c++