js面向对象(二):内置对象的原型对象 共有属性和自有属性 原型链

1. 内置对象的原型对象: 
   所有内置对象都是一个构造函数(除Math外)
   每类内置对象都有自己的原型对象(prototype)
   所有内置对象的API都保存在类型.prototype对象中
   何时: 解决浏览器兼容问题: 2步:
      如果类型.prototype.方法===undefined
         类型.prototype.方法=function(...){
            this->自动获得将来调用该方法的当前对象
         }

2. 共有属性和自有属性: 
   自有属性: 直接保存在对象本地的属性
   共有属性: 保存在父级原型对象中的属性
   访问共有/自有属性:
      读取属性值: 即可用子对象读取,也可用原型对象读取
      修改属性值: 
          自有属性: 子对象.属性名=值
          共有属性: 原型对象.属性名=值 
   如何判断自有还是共有: 
      自有: var bool=obj.hasOwnProperty("属性名")
          判断obj中是否包含自有属性"属性名"
      共有: 不是自有! 且 子对象可访问到!

3. ***原型链(prototype chain):
   什么是原型链: 多级父对象连续继承,形成的链式结构
      保存了: 对象的属性和方法
      控制了: 对象的成员的使用顺序
         优先使用自有成员
         自己没有才延原型链向父级查找,只要找到就不再向上
         如果整个原型链上都没有,才返回undefind
   vs 作用域链(scope chain)
      保存了: 全局/局部的变量
      控制了: 变量的使用顺序
         优先在当前函数调用的函数作用域对象(AO)中查找
         如果函数作用域对象(AO)中没有,才延作用域链向全局方向查找。只要找到,就不再继续
         如果整个作用域链上都没有,才报错

鄙视题: 判断一个对象是不是数组类型,有几种方式
   0. typeof只能区分基础类型和function
              无法进一步区分对象的类型
   1. 判断原型对象: 
     如果obj的原型是Array.prototype说明是数组
      obj.__proto__==Array.prototype 
      问题: __proto__是内部属性,本来浏览器是禁止使用的
      解决: Object.getPrototypeOf(obj)
               获得obj的原型对象 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值