ECMAScript5之Object学习笔记(一)
随着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学习笔记(一)的更多相关文章
- ECMAScript5之Object学习笔记(三)
第三部分继续... Object.getOwnPropertyDescriptor(obj, prop) 获取一个对象的属性描述符 根据"Own"这个词我们可以猜到,prop只能是 ...
- ECMAScript5之Object学习笔记(二)
继续第二部分 Object.freeze(obj) 看字面意思就是“把一个对象冻结”. 下面我们来看个简单的例子以作说明: // a person instance var person = { na ...
- Object学习笔记
<script type="text/javascript"> function forEach(o){ var html =""; for(var ...
- [javascript|基本概念|Object]学习笔记
对象:数据和功能的集合 创建对象:new 对象类型名称 e.g.: var o = new Object(); 或 var o = new Object(省略(),不推荐) 或 var o = {}( ...
- JavaScript Object学习笔记二
Object.create(proto, [propertiesObject])//创建对象,使用参数一来作为新创建对象的__proto__属性,返回值为在指定原型对象上添加自身属性后的对象 //参数 ...
- JavaScript Object学习笔记一
Object.assign(target, source1, source2, ...)//用于对象的复制合并(同名属性后覆盖前)或拷贝(拷贝自身可枚举属性,不拷贝继承属性或不可枚举属性),将sour ...
- Object C学习笔记24-关键字总结
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- Object C学习笔记22-#define 用法
上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...
- Object C学习笔记21-typedef用法
在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作 ...
随机推荐
- linux 设备文件和设备之间联系的建立
<设备驱动模型> 注:几乎所有的设备结构体都包含"strcut kobject kobj"和"srtuct list_head list"该结构体 ...
- md 添加 图片
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 1.在github上的仓库建立一个存放图片的文件夹,文件夹名字随意.如:img-fold ...
- shellcode在栈溢出中的利用与优化
0x00 前言 在<Windows Shellcode学习笔记——shellcode的提取与测试>中介绍了如何对shellcode作初步优化,动态获取Windows API地址并调用,并通 ...
- bzoj 2150 最小路径覆盖
最小路径覆盖问题是:给定一个DAG,该DAG的一个路径覆盖是一个路径的集合,使得每个点属于且仅属于其中一条路径,问题就是求一个大小最小的路径集合. 做法是将每个点A拆成两个点A1,A2,如果A-> ...
- Loj10166 数字游戏2
题目描述 由于科协里最近真的很流行数字游戏,某人又命名了一种取模数,这种数字必须满足各位数字之和 modN 为 000.现在大家又要玩游戏了,指定一个整数闭区间 [a,b][a,b][a,b],问这个 ...
- CentOS 7提示:ERROR unsupported format character '(0xffffffe7) at/域安装失败,您可以运行下列命令重启您的域:
别理会,直接装即可,这个错误不影响使用.
- HDU 4499 Cannon (搜索)
Cannon Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- ios项目开发(天气预报项目):使用正则获取 weather.com.cn站点信息
NSString *pattern = @"(?<=<td class=\"bigblod\">).*?(?=</td>)"; 2 ...
- both, either, neither的用法
http://www.yywords.com/Article/200806/347.html 1. 这三个词都用来谈论两者:both 意为“(两者)都”,either意为“(两者中)任意一个”,ne ...
- 如何在发型不乱的前提下应对单日十亿计Web请求
原文地址:http://developer.51cto.com/art/201502/464640.htm 就在不久之前,AppLovin移动广告平台的单一广告请求数量突破了200亿大关——相当于每一 ...