美文网首页
有关js原型prototype,__proto__,constr

有关js原型prototype,__proto__,constr

作者: 雪河冰兰 | 来源:发表于2018-08-30 19:20 被阅读17次

总结

  • 函数都有原型。
  • new P() 出来的是实例,实例没有原型,是个P类型的。
  • 而所有的原型其实类型都是对象。
  • 对象其实是个函数类型。
  • 而函数还是个函数类型。
  • 对象的原型的原型是null。

关键点

  1. 函数即构造函数,构造函数即函数
  2. 函数都有prototype属性
  3. __proto__, prototype, constructor的关系
  4. 原型的原型是 Object.prototype
  5. Object.prototype不是任何的实例
  6. Function.prototype 是 Object 的实例
  7. Object是Function的实例
  8. Function是Function的实例
一张图看清 构造函数、实例、Function 和 Object 的关系

详解

1. 函数即构造函数,构造函数即函数

当创建了一个函数的时候,就有了这个函数的原型对象

2. 函数都有prototype属性

function P() {}
var obj = {}

console.log('P.__proto__', P.__proto__)
console.log('obj.__proto__', obj.__proto__)

console.log('P.prototype', P.prototype)
console.log('obj.prototype', obj.prototype) // 没有,也就是没有原型

3. __proto__, prototype, constructor的关系

function P() {}
let pp = new P() //pp是P的实例

// __proto__
console.log(pp.__proto__ == P.prototype) // __proto__ 是用来指定实例的原型的
console.log(P.__proto__ == Function.prototype) // 同理P作为一个函数,它是Function的实例,与pp对P是一个意思

// prototype,和constructor
// 如上面所说,函数即构造函数有prototype属性,那么 constructor是用来指回 构造函数的(这个如果丢失了,不会影响很多,但最好不丢失)
console.log(P.prototype.constructor == P)

4. 原型的原型是 Object.prototype

function P() {}
console.log(P.prototype.__proto__ === Object.prototype)

5. Object.prototype不是任何的实例

Object.prototype.__proto__ === null

6. Function.prototype 是 Object 的实例

Function.prototype.__proto__ === Object.prototype

7. Object是Function的实例

Object.__proto__ === Function.prototype

8. Function是Function的实例

Function.__proto__ == Function.prototype

9 一个案例


Object.prototype.aa = 'ooooo'

Function.prototype.aa = 'fffff'

function P() {}

var xx = new P()

console.log(p.aa)  //"ooooo"
P.__proto__ === Function.prototype //true
P.prototype.__proto__ === Object.prototype //true
xx.__proto__ === P.prototype //true
xx.__proto__ === Object.prototype //false

var b = {a: 1}

b.__proto__ === Object.prototype //true

相关文章

  • 有关js原型prototype,__proto__,constr

    总结 函数都有原型。new P() 出来的是实例,实例没有原型,是个P类型的。而所有的原型其实类型都是对象。对象其...

  • js基础知识(二)

    一、js原型和原型链 1、原型讲解: 普通的对象:是没有prototype属性的,只有隐藏属性__proto__,...

  • JavaScript原型链

    js原型链 原型链是JS面向对象的基础非常重要 所有对象只有__proto__属性,而函数具有prototype属...

  • JavaScript 学习

    JS 原型与原型链 每个对象都有 __proto__属性,但只有函数对象才有 prototype 属性 所有对象的...

  • javascript中__proto__与prototype区别

    __proto__ (隐式原型 implicit prototype link)prototype (显示原型 e...

  • JScript语言——原型与原型链

    # 原型:prototype属性、__proto__、constructor属性 prototype,只是函数的一...

  • JS原型链

    JS原型链 回顾一下类,实例,prototype,__proto__的关系 另外有: 对于p1.construcr...

  • JS原型链

    最简短精炼的JS原型链介绍:1.所有函数的__ proto__都是Function.prototype2.所有实例...

  • 原型和原型链

    prototype 原型,每一个函数都有一个prototype属性,也叫原型对象 __proto__ 原型链,每一...

  • 原型和原型链的由来&在数据结构中的关系

    关键词: 原型(prototype)和原型链(__proto__) 数据结构 全局对...

网友评论

      本文标题:有关js原型prototype,__proto__,constr

      本文链接:https://www.haomeiwen.com/subject/ehidwftx.html