原型链,函数与对象关系

function Person(){this.name="ceshi"}
// 例1
Person.__proto__===Function.prototype // true
Person.__proto__===Person.constructor.prototype // true
Person.constructor === Function // true
// 例2
Person.prototype.__proto__===Object.prototype  //true
// 例3
Person.prototype.constructor===Person // true


例1: 所有对象的__proto__指向其构造器的 prototype。通过例子我们可以看出Person的构造函数是Function。
所有函数对象proto都指向 Function.prototype,它是一个空函数(Empty function)

例2: 所有对象的原型对象的__proto__指向Object的原型对象

例3: 所有对象的原型对象的构造函数指向对象自身

function Person(){this.name="ceshi"}
var p = new Person()
// 例4
p.__proto__ === Person.prototype // true
p.__proto__.__proto__ === Object.prototype // true
// 因为p.__proto__ === Person.prototype,所以
Person.prototype.__proto__ === Object.prototype // true

p.constructor === Person // true
p.__proto__.constructor = Person //true
p.constructor === Person.prototype.constructor // true

实例的__proto__指向原型的原型对象(Person.prototype)
实例的构造函数指向原型(实例的原型的原型对象)

图示

每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象

var func = function() {
        console.log(this.c);
      }.bind(this)()
func.prototype = undefined
      

每个函数都有prototype属性,除了Function.prototype.bind()

JS中的函数与对象

1 函数是一种对象
2 对象都是函数创建的

// 对象是由Function创建的
console.log(Object.__proto__ === Function.prototype) // true
// 函数也是由Function 创建的
console.log(Function.__proto__ === Function.prototype) // true
// 所以等价 对象的构造函数和函数的构造函数相等
console.log(Object.__proto__ === Function.__proto__) // true
// 函数的原型__proto__指向对象原型 函数是一种对象
console.log(Function.prototype.__proto__===Object.prototype) // true
// 可以说明 函数是一种对象
console.log(Function instanceOf Object) // true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值