1、什么是原型?
JavaScript中,万物皆对象!但对象也是有区别的。分为普通对象和函数对象。Object、Array、Date、RegExp、Math等为普通对象。Function 是JS自带的函数对象。当用typeof得到一个函数对象的类型时,它仍然会返回字符串“function”,而typeof一个数组对象或其他的对象时,它会返回字符串“object”。
alert(typeof(Function)));
alert(typeof(new Function()));
alert(typeof(Array));
alert(typeof(Object));
alert(typeof(new Array()));
alert(typeof(new Date()));
alert(typeof(new Object()));
运行这段代码可以发现:前面4条语句都会显示“function”,而后面3条语句则显示“object”,可见new一个function实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。
每个对象都有原型即__proto__
(null和undefined除外),你可以把它理解为对象的默认属性和方法。
2、什么是protoType?
在JavaScript中所有的函数对象均有protoType属性。并且浏览器会为我们开辟一个独立的内存空间,这个内存空间可以让我们盛放共有的属性和方法,通过protoType来指向。
3、什么是constructor
在默认情况下,a.protoType
下会带有一个constructor属性,该属性指向创建当前函数对象的构造函数。比如这里的constructor指向构造函数啊本身
a.protoType.constructor==a //true
4、什么是原型链?
在JavaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接。这个原型对象又有自己的原型,直到某个对象的原型为 null 为止(也就是不再有原型指向),组成这条链的最后一环。这种一级一级的链结构就称为原型链(prototype chain)。
JavaScript 对象是动态的属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依此层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
当你用new Object或者直接定义一个对象时,它的原型链就是:
o ==》 Object.prototype ==》 null
当你用构造函数(构造函数我们一般首字母大写)建立一个对象时,它的原型链就是:
tsrot ==》 Person.prototype ==》 Object.prototype ==》 null