js部分的复习(2)

36 篇文章 0 订阅
25 篇文章 0 订阅

1.这里a,b,形参obj都指向了同一个对象,a.age最后的值为13的原因你可以想成虽然传的实参为a但是其实和上面a是不同的,它把那条线断开了,上面的a指向依然是age=13,下面的obj指向了age=15,,所以a依然为13,形参obj只不过是传了一个地址值,下面又修改了地址值
在这里插入图片描述

2.关于this
如何确定this的值?

  • test(): window
  • p.test(): p
  • new test(): 新创建的对象
  • p.call(obj): obj

!3.原型与原型链!
这里可能比较难理解,可以配合图来理解,两个图,可以很好理解。
1.每个函数function都有一个prototype,即显式原型(属性)
2.每个实例对象都有一个__proto__,可称为隐式原型(属性)
3.每个函数function都有一个prototype,即显式原型属性, 默认指向一个空的Object对象

1. 函数的显示原型指向的对象默认是空Object实例对象(但Object不满足)
   */
  console.log(Fn.prototype instanceof Object) // true
  console.log(Object.prototype instanceof Object) // false
  console.log(Function.prototype instanceof Object) // true
  /*
  2. 所有函数都是Function的实例(包含Function)
  */
  console.log(Function.__proto__===Function.prototype)
  /*
  3. Object的原型对象是原型链尽头
   */
  console.log(Object.prototype.__proto__) // null
  /*
  测试题1
   */
  function A () {

  }
  A.prototype.n = 1

  var b = new A()

  A.prototype = {
    n: 2,
    m: 3
  }

  var c = new A()
  console.log(b.n, b.m, c.n, c.m) //1,undefined,2,3
这里其实可以想成重新给A.prototype赋值了,把那条和n=1线断开了,但是b还指着最开始的A,所以结果这样

在这里插入图片描述

  /*
   测试题2
   */
  function F (){}
  Object.prototype.a = function(){
    console.log('a()')
  }
  Function.prototype.b = function(){
    console.log('b()')
  }
  var f = new F()
  f.a() 可以找到
  f.b() 不可以找到
  F.a() 相当于F变成实例对象,可以找到
  F.b() 可以找到

在这里插入图片描述
在这里插入图片描述
这里最后一张图表示了所有的原型链,一定要背住,并且明白每条线的意义,其实两张图配合来比较,总结一下几点

  1. Foo.prototype和Function.prototype就是指的空的obj,而空的obj又是Object的实例对象,所以指向Object.prototype,
  2. 无论Object还是Function都是通过Function构造出来的,
  3. 函数的显式原型属性是空的obj对象,
  4. 实例对象的隐式原型指向构造函数的显示原型

ok, 今晚就到这里,最后两道是面试题,慢慢体会,默写一遍图,明天继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值