每天一点,学习JavaScript【对象】

理解对象

面向对象的定义:无序属性的集合,其属性可以包含基本值、对象或者函数。每个对象都是基于一个引用类型创建的。

属性类型

ECMAScript中有两种属性:数据属性访问器属性
为了表示特性是内部值,ECMA-262规范把属性放在了两对儿方括号中,如[[Enumerable]]

数据属性

描述符 描 述 默认值 delete来删除属性从而重新定义属性、能否修改属性的特性、或者能否把属性修改为访问器属性for-in循环返回属性defineP定义的属性默认为false,直接定义的为trueproto这个没搞懂,在高程3内没有,MDN里有 访问器属性

访问器属性不包含数据值,它们包含一对儿gettersetter函数(非必须)
读取访问器属性时,会调用getter函数;写入访问器属性时,会调用setter属性并传入新值

描述符 描 述 默认值 delete来删除属性从而重新定义属性、能否修改属性的特性、或者能否把属性修改为访问器属性for-in循环返回属性函数 函数 示例

Object.defineProperty()

数据属性和访问器属性可以通过Object.defineProperty进行设置。要修改属性默认的特性,必须使用这个方法,常用于DOM对象

console.log(person.name)    // Niko
delete person.name
console.log(person.name)    // Niko
person.name = 'Bellic'
console.log(person.name)    //Bellic</code></pre>
 2014){
                this.edition += newValue-this._year
                this._year = newValue
            }
        }
    })
book.year = 2015
console.log(book.edition)    // 2</code></pre>

Object.defineProperties()定义多个属性

Object.getOwnPropertyDescriptor()返回指定指定属性的描述对象

Object.getOwnPropertyDescriptors() es6引入,返回对象所有属性(非继承属性)的描述对象

主要是为了解决Object.assign()无法正确拷贝get属性和set属性²
...

ES6拓展

属性的遍历

  • for..in
    循环遍历对象自身和继承的可枚举属性(不包含Symbol属性)
  • Object.keys(obj)
    返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不包含Symbol属性)的键名
  • OBject.getOwnPropertyNames(obj)
    返回一个数组,包含对象的所有属性(包括不可枚举属性)(不包含Symbol属性)的键名
  • Object.getOwnPropertySymbols(obj)
    返回一个数组,包含对象自身的所有Symbol属性的键名
  • Reflect.ownKeys(obj)
    返回一个数组,包括对象自身的所有键名(包括不可枚举属性和Symbol属性或字符串)

Object.assign()

Object.assign(target,source1,source2)
对象的合并,将源对象(source)可枚举的属性,复制到目标对象(target)并返回被修改的目标对象
注意点:

  1. 浅拷贝
    拷贝的是源对象的引用,源对象有任何变化,都会反应到目标对象上
  2. 同名属性的替换
    目标对象和源对象的属性名相同时,源对象会替换掉目标对象的该属性
  3. 数组的处理
    Object.assign([1,2,3],[4,5]) // 返回[4,5,3] 数组被视为对象{1:1,2:2,3:3},{1:4,2:5}

使用技巧

  1. 为对象添加属性

  2. 为对象添加方法 Mixin模式

  3. 克隆对象

    // 克隆对象的继承值
    function clone2(origin){
    let originProto = Obeject.getPrototypeOf(origin)
    return Object.assign(Object.create(originProto),origin);
    }

对原型对象的操作方法

  • __proto__
    用来读取或设置当前对象的prototype对象。(ps:以下划线命令的一般都是只读私有属性,所以原型对象的操作最好用下面

相关文章

kindeditor4.x代码高亮功能默认使用的是prettify插件,prett...
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小