论断1:Object.prototype只是一个一般对象,它是js原型链的最顶端。
(typeof Object.prototype) === object;//trueObject.prototype.__proto__=== null;//trueObject.prototype.prototype === undefied;//true
Object.prototype只是一个一般对象(一般对象没有prototype属性,所以值是undefined),Object.prototype是js原型链的最顶端,它的__proto__是null(有__proto__属性,但值是null,因为这是原型链的最顶端)。
论断2:在js中如果A对象是由B函数结构的,那么A.proto === B.prototype。
function Person(){ }var obj = {};alert(obj.__proto__ === Object.prototype);//truealert(Person.__proto__ === Function.prototype);//true
javascript中对象是由Object创立的,函数是由Function创立的。
论断3:内置的Object是其实也是一个函数对象,它是由Function创立的。
Object.__proto__ === Function.prototype;
论断4:js中每一个对象或函数都有__proto__属性,然而只有函数对象才有prototype属性。
//函数对象function Person(){ } // 一般对象var obj = {}; obj.__proto__ === Object.prototype;//trueobj.prototype === undefined;//truePerson.__proto__ === Function.prototype;//truePerson.prototype !== undefined;//true
咱们晓得javascript正是通过prototype实现继承的。如果objA、objB都是由cFunction创立的,那么依据论断2,objA.proto === objB.proto === cFunction.prototype,也就是说objA和objB对象都继承了cFunction的prototype。原型链是基于__proto__造成的,继承是通过prototype实现的。
论断5:Function.prototype是个特例,它是函数对象,然而没有prototype属性。其余所有函数都有prototype属性。
(typeof Function.prototype) === function;//trueFunction.prototype.prototype === undefined;//true
论断6:内置的Function也是一个函数对象,它是通过本人来创立本人的。
(typeof Function.__proto__) === function;//trueFunction.__proto__=== Function.prototype;//trueFunction这个函数对象,由其本身通过Function函数结构的。
论断7:函数也是对象,因为Function.prototype__proto__指向Object.prototype。
(typeof Function.prototype.__proto__) === "object";//trueFunction.prototype.__proto__=== Object.prototype;//true
最初提一下:原型链是基于__proto__造成的,继承是通过prototype实现的。
每个对象都有一个__proto__属性,原型链上的对象正是依附这个__proto__属性连结在一起的! 对于原型链上的一个对象obj,那么拜访obj.xxx属性(办法也是属性)的过程是: 如果本身有xxx属性,则拜访它;如果没有,就通过__proto__属性找到其原型链的上一级原型对象,看它有没有xxx属性,如此递归查找,直至找到xxx属性或到了原型链顶端Object.prototype对象为止。
函数领有prototype属性,该属性值是一个object类型。当函数A创建对象B的时候,B对象的__proto__会指向A.prototype,这就是javascript的继承。
本文参考了https://blog.csdn.net/weixin_40191445/article/details/83477219这篇文章,对其内容进行转载,不便记忆学习。