随着IE的逐步追赶,目前到IE11已经能够很好的支持ECMAScript5标准了,其他的现代浏览器像firefox,chrome,opera就更不用说了。

再加上nodejs使得javascript在后台开发中得到施展的舞台,这很自然的激发了我对ECMAScript5相关的特性的求知欲望。

以此展开,写一个ECMAScript5新特性的学习笔记。

先来看看Object

  • Object.create(proto[, propertiesObject])

    create方法通过指定的原型对象(prototype object)和属性(properties)来创建一个新的对象。

    proto:即为新创建对象的prototype

    propertiesObject:带属性描述的属性对象(姑且这么翻译)

    create方法能够让我们方便的通过prototype原型链来实现“继承”:

         // super class
    var Human = function(cfg) {
    this.gender = cfg.gender;
    this.name = cfg.name;
    }; Human.prototype.sayHello = function() {
    console.log('Hello, I am ' + this.name);
    }; // sub class
    var Citizen = function(cfg) {
    this.country = cfg.country;
    // call super constructor
    Human.call(this, cfg);
    }; // prototype chain inherit
    Citizen.prototype = Object.create(Human.prototype);
    // override constructor
    Citizen.prototype.constructor = Citizen; // overwrite super class method
    Citizen.prototype.sayHello = function() {
    console.log('Hello, I am ' + this.name + ' from ' + this.country);
    }; var h = new Human({
    gender: 'female',
    name: 'lucy'
    });
    h.sayHello();
    console.log( h instanceof Human ); var c = new Citizen({
    gender: 'male',
    name: 'Andrew',
    country: 'USA'
    });
    c.sayHello();
    console.log( c instanceof Citizen);
  • Object.defineProperty(obj, prop, descriptor)

    defineProperty方法直接在一个对象上定义一个新属性,或者更改一个已存在的属性,返回对象本身。

    obj:对象

    prop: 属性名

    descriptor: 属性描述对象

    用code来做直观说明:

     /*
    enumerable 是否可列举 默认:false
    writable 是否可写 默认:false
    configurable是否可配置 默认:false
    value 默认:undefined 访问器
    get 默认:undefined
    set 默认:undefined
    */
    var o = {}; // enumerable 是否可列举
    Object.defineProperty(o, 'a', {
    value: 1,
    enumerable: false
    }); Object.defineProperty(o, 'b', {
    value: 2,
    enumerable: true
    }); Object.defineProperty(o, 'c', {
    value: 3
    // enumerable默认false
    }); o.d = 4; for(var prop in o) {
    // 输出b、d
    console.log(prop);
    } // writable 是否可写(更改值)
    // 这个特性在定义常量时比较有用
    Object.defineProperty(o, 'e', {
    value: 10,
    writable: false
    }); console.log(o.e); //
    o.e = 15; // 一般没错误抛出,若是在strict mode(严格模式下)会抛出错误
    console.log(o.e); // // configurable 是否可配置
    Object.defineProperty(o, 'f', {
    configurable: true,
    get: function() { return 10; }
    }); // 如果configurable为false,那么下面这些redefine(重定义)操作都会报TypeError
    // 如果configurable为true,那么下面这些操作均能成功,delete操作也能删除e属性
    Object.defineProperty(o, 'f', { configurable: true }); // TypeError
    Object.defineProperty(o, 'f', { enumerable: true }); // TypeError
    Object.defineProperty(o, 'f', { set: function() {} }); // TypeError
    Object.defineProperty(o, 'f', { get: function() {return 10;}}); //TypeError
    Object.defineProperty(o, 'f', { value: 12}); // TypeError console.log(o.f); //
    delete o.f; // nothing happens
    console.log(o.f); // // get, set访问器
    // 注意:有get、set的情况下,不能同存在value,writable属性,否则会报错
    var variable = 10;
    Object.defineProperty(o, 'g', {
    get: function() {
    return variable;
    },
    set: function(val) {
    variable = val;
    }
    }); console.log(o.g); //
    o.g = 14; // set(14)
    console.log(o.g); // // 补充:
    o.h = 1;
    // 相当于:
    Object.defineProperty(o, 'h', {
    value: 1,
    writable: true,
    configurable: true,
    enumerable: true
    }) ; Object.defineProperty(o, 'h', { value: 1 });
    // 相当于:
    Object.defineProperty(o, 'h', {
    value: 1,
    writable: false,
    configurable: false,
    enumerable: false
    });
  • object.defineProperties(obj, props)

    这个与defineProperty的区别在于一下子可以定义多个属性,就再不展开了。

第一部分暂时到这里结束 : ),感兴趣的同学可以直接去MDN进行了解,请点击这里

ECMAScript5之Object学习笔记(一)的更多相关文章

  1. ECMAScript5之Object学习笔记(三)

    第三部分继续... Object.getOwnPropertyDescriptor(obj, prop) 获取一个对象的属性描述符 根据"Own"这个词我们可以猜到,prop只能是 ...

  2. ECMAScript5之Object学习笔记(二)

    继续第二部分 Object.freeze(obj) 看字面意思就是“把一个对象冻结”. 下面我们来看个简单的例子以作说明: // a person instance var person = { na ...

  3. Object学习笔记

    <script type="text/javascript"> function forEach(o){ var html =""; for(var ...

  4. [javascript|基本概念|Object]学习笔记

    对象:数据和功能的集合 创建对象:new 对象类型名称 e.g.: var o = new Object(); 或 var o = new Object(省略(),不推荐) 或 var o = {}( ...

  5. JavaScript Object学习笔记二

    Object.create(proto, [propertiesObject])//创建对象,使用参数一来作为新创建对象的__proto__属性,返回值为在指定原型对象上添加自身属性后的对象 //参数 ...

  6. JavaScript Object学习笔记一

    Object.assign(target, source1, source2, ...)//用于对象的复制合并(同名属性后覆盖前)或拷贝(拷贝自身可枚举属性,不拷贝继承属性或不可枚举属性),将sour ...

  7. Object C学习笔记24-关键字总结

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  8. Object C学习笔记22-#define 用法

    上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...

  9. Object C学习笔记21-typedef用法

    在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作 ...

随机推荐

  1. [POI2012]Salaries

    题目大意: 给定一棵n带权树,每个点的权值在[1,n]范围内且互不相等,并满足子结点的权值一定小于父结点. 现在已知一个包含根结点的联通块中个点的权值,求剩下哪些点的权值能够被求出,并求出这些权值. ...

  2. Shell 学习笔记之运算符

    基本运算符 算术运算符 val = expr 2 + 2 需要注意的是 表达式和运算符之间需要有空格(比如2 + 2,不能是2+2) 两边最外面的字符是`,在esc键下面,不是引号哦 乘号* 前面必须 ...

  3. BZOJ 4554: [Tjoi2016&Heoi2016]游戏 二分图匹配

    4554: [Tjoi2016&Heoi2016]游戏 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4554 Descripti ...

  4. nlogn 求最长上升子序列 LIS

    最近在做单调队列,发现了最长上升子序列O(nlogn)的求法也有利用单调队列的思想. 最长递增子序列问题:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i<j,必有a[i]& ...

  5. opencv第二课 进行缩放图片~

    #include<stdio.h> #include<iostream> #include<opencv2\opencv.hpp> using namespace ...

  6. wikioi 1434 孪生素数 水题、素数模版

    1434 孪生素数 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 输出100以内的所有相差6的孪生素数:如, 5 11 7 13 ...

  7. 获取不到offsetHeight问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. [Linux] VIM Practical Note

    Practical Vim 文件 1.1. 管理多个文件 1.1.1. 缓冲区 • :ls • 查看缓冲区列表 • :bprev • 前一项 • :bnext • 后一项 • :bfirst • 第一 ...

  9. 给Android组件添加事件一个很好用的方法

    在这里想和大家分享一下很好用的添加事件方法,特别是在处理ListView里的Item事件的时候,很方便. 首先,在XML里布局的时候,添加这样一个属性: android:onClick="C ...

  10. java 入门书籍(java7)

    一.Java从入门到精通 <Java从入门到精通(第3版)>从刚開始学习的人角度出发,通过通俗易懂的语言.丰富多彩的实例.具体介绍了使用Java语言进行程序开发须要掌握的知识. <J ...