对象相关理解

对象相关

  • 对象的语法分文字和构造形式,基本的类型string、number、boolean、null、undefined(typeof null 返回的是字符串object),内置对象(对象子类型)有String\Number\Boolean\Object\Function\Array\Date\RegExp\Error,一般来讲,字面量上执行一些操作,例如获取长度等,需要转为String对象,但是很好的一点在于自动会转换不需要显示创建;
  • null和undefined没有对应的构造形式;Date只有构造,没有文字形式;Object、Array、Function、RegExp无论文字还是构造形式都是对象不是字面量。
  • 访问.a和[a],前者要求满足标识符命名规范,后者接受字符串,即使不是字符串也会自动转成字符串;
  • 属性和方法,在函数问题上,函数与方法是不相等的,函数不会“属于”这个对象,它们只是对于相同函数对象的多个引用;
  • 属性描述:可以使用 Object.defineProperty(…)来添加一个新属性或者修改一个已有属性并对特性进行设置;
  • 不变性:writable:false 和 configurable:false结合、使用 Object.preventExtensions(…)禁止扩展、Object.seal(…)密封、Object.freeze(…)冻结;
  • 对象默认的内置 [[Get]] 操作首先在对象中查找是否有名称相同的属性,如果找到就会返回这个属性的值,如果没有找到名称相同的属性,按照 [[Get]] 算法的定义会执行遍历可能存在的原型链;可以使用 getter 和 setter 部分改写默认操作,但是只能应用在单个属性上,无法应用在整个对象上。getter 是一个隐藏函数,会在获取属性值时调用。setter 也是一个隐藏函数,会在设置属性值时调用,属性定义 getter、setter 或者两者都有时,这个属性会被定义为“访问描述符”;
  • 存在性:in 操作符会检查属性是否在对象及其 [[Prototype]] 原型链中。相比之下,hasOwnProperty(…) 只会检查属性是否在 myObject 对象中,不会检查 [[Prototype]] 链,但是有的对象可能没有连接到 Object.prototype,所以还可以Object.prototype.hasOwnProperty.call(myObject,“a”),in检查是否有某个值,但是数组的属性名是角标,所以查的是角标。而所谓的枚举就是可以在遍历中有对象的属性,propertyIsEnumerable(…) 会检查给定的属性名是否直接存在于对象中(而不是在原型链上)并且满足 enumerable:true 。Object.keys(…) 会返回一个数组,包含所有可枚举属性, Object.getOwnPropertyNames(…)会返回一个数组,包含所有属性,无论它们是否可枚举。
  • 遍历:forEach(…) 会遍历数组中的所有值并忽略回调函数的返回值。 every(…) 会一直运行直到回调函数返回 false,some(…) 会一直运行直到回调函数返回 true,every(…) 和 some(…) 中特殊的返回值和普通 for 循环中的 break 语句类似,它们会提前终止遍历。使用 for…in 遍历对象是无法直接获取属性值的,for…of 循环直接遍历值而不是数组下标,数组有内置的@@iterator ,Symbol.iterator 来获取对象的 @@iterator 内部属性。

混合对象“类”

  • 类通过复制操作被实例化为对象形式,类实例是由一个特殊的类方法构造的,这个方法名通常和类名相同;
  • 多态:第一任何方法都可以引用继承层次中高层的方法,第二在继承链的不同层次中一个方法名可以被多次定义,当调用方法是会自动选择合适的定义;类的继承就是复制。

行为委托

  • prototype机制本质就是对象之间的关联关系,委托行为意味着某些对象找不到属性或方法引用时会把这个请求委托给另一个对象;
  • 面向类使用的继承,挂在垂直结构上,面向委托是不相关的两个,当找不到属性和方法时需要进行委托(去别人看看有没有)他人。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值