js原型链

    js 原型链,其实就是对象,方法的一些关系,首先要明确一点,对象实例是没有prototype,函数才有prototype

    废话不多说我们一些console一下都是写什么东西

/* 首先我们创建一个对象 */
let obj = {}
/* 上面的和下面是一样的,都是一个空对象 */
let obj2 = new Object()

console.log(obj.prototype)  // 输出undefined
/* 证明对象实例确实是没有prototype的 */
/* 让后我们查看一下obj.__proto__ */
console.log(obj.__proto__)/* 行吧输出了一对东西无法判断 */
/* 我们猜测一下 */
console.log(obj.__proto__===Object.prototype) //输出true
/* 上面一行 完全等于,证明这是一个东西*/
/* 那Object.__proto__ 又指向的啥,打印一下 */

console.log(Object.__proto__) // ƒ () { [native code] }
/* 有点像一个函数 */
/* 猜测一下 */
console.log(Object.__proto__ === Function.prototype) //输出true /* 原来指向的是这里 */

/* 那我们继续看一下 Object.prototype.__propo__ 是啥*/
console.log(Object.prototype.__proto__) //输出 null /* 到null了,证明到头了,没东西了 */

/* 那上面就是对象的一整条原型链了 */

/* 那下面我们看一下函数的 */
/* 首先看一下构造函数 */

function Person () {
    name: 'cz'
}

let p1 = new Person()

/* p1是一个对象,根据上面的他只有__proto__ */
console.log(p1.__proto__) // constructor ƒ Person()

console.log(p1.__proto__ === Person.prototype) //true

/* 下面就是一个正常的函数了 */
/* Person 就是一个函数 */
console.log(Person.__proto__) // ƒ () { [native code] }
/* 上面这个看着有点像,挺像,之前,Object.__proto__ */
/* 那就不用考虑了 */
console.log(Person.__proto__ === Function.prototype) //ture
/* 再看一下 Function.__proto__*/
console.log(Function.__proto__) //ƒ () { [native code] }  
/* 然是这样,Funtion的显示原形和隐式原形相等 */
console.log(Function.__proto__.__proto__) /* 输出,constructor: ƒ Object() 有点意思*/
/* 上面的不是  Function.__proto__.__proto__ === Function.prototype.__proto__*/
/* 那最终是不是有道对象上去了 */
console.log(Function.prototype.__proto__ === Object.prototype) //输出true

  function 最终又到Object,不得不说一切都对象 

  总结一下

    重点重点,实例对象没有prototype,

    最终Object.prototype.__proto__  指向的null

    Function.prototype === Function.__proto__  

    Function.prototype.__proto__ === Object.prototype
    实例对象的__proto__ 只想构造函数的 prototype
    构造函数的__proto__ (构造函数其实是一个对象) 当然具体构造函数名.prototype
    具体构造函数名.__proto__只想 Function.prototype 也等于  Function.__proto__
 
    上面就是一条回路了。现在清晰了吧
    
posted @ 2019-04-24 00:09  waitklove  阅读(274)  评论(0编辑  收藏  举报