使用原型对象的优点:可以让所有对象实例共享它所包含的属性和方法。
1. 构造函数(supperClass)有prototype属性,指向实例对象的原型对象(supperClass.prototype);
/*通过同一个构造函数实例化的多个对象具有相同的原型对象,经常使用原型对象来实现继承*/
实例对象有-proto-(对象的内部原型),并且指向创建该对象的函数的prototype;
(prototype就是通过调用构造函数而创建那个对象实例的原型对象)
那么由该函数new出来的实例对象也有该函数的所有方法。(不必在构造函数中定义对象实例的信息);
2.原型对象有一个construct属性,指向该原型对象对应的构造函数
3.supperClass.prototype是一个对象,也有-proto-属性,所以它的这个属性也指向创建该对象的构造函数的prototype,
所以他的-proto-指向Object.prototype
4.实际上,任何对象都可以看做是通过Object()构造函数的new操作实例化的对象,所以supperClass.prototype这个对象的
-proto-属性指向Object.prototype.;
任何函数作为对象时,它的_proto_也应该指向创建它的函数的prototype,即Function.prototype。
而Function.__proto__ === Function.prototype
5.函数也是对象,只不过是具有特殊功能的对象而已。任何函数都可以看做是通过Function()构造函数的new操作实例化的结果;
例如:function fn1( x , y){ return x + y ; } console.log ( fn1( 2,3 ) ) //5
var fn1=new Function( " x " , " y " , "return x + y") console.log ( fn1( 2,3 ) ) //5
6.对象O instanceof 构造函数(constructor
)
instanceof
运算符用来检测 constructor.prototype
是否存在于参数 object
的原型链上。
对象O沿着-proto-开始是找,构造函数沿着prototype开始找,如果能找到同一引用,证明是同一对象。
1.JS中,函数本身也是一个包含了方法和属性的对象。
2.prototype是每个函数中都有的一个属性,叫做原型,它是一个对象。
3.__proto__是每个对象都具有的一个属性,这个指向了它的构造函数的原型(prototype),是它的引用(我们称这个属性为链接),而且每个prototype都有__proto__属性,因此本身也包含了指向其原型的链接,由此形成了一条链,我们称为原型链。
4.Object是JS所有对象的父级对象,Object()为构造函数。
5.Function是所有函数对象的构造对象,Function()为构造函数,所以Object和Function都有prototype属性。
6.我们可以通过constructor来查看对象的构造函数,isPrototypeOf来确定某个对象是不是我的原型,hasOwnProperty 方法判断属性是否存在