Function
1: Object.create
这是一个很重要的改动,现在我们终于可以得到一个原型链干净的对象了。以前要创建一个类
function Cat(name) {
this.name = name;
this.paws = 4;
this.hungry = false;
this.eaten = [];
}
Cat.prototype = {
constructor : Cat,
play : function () { this.hungry = true; return 'playing!'; },
feed : function (food) { this.eaten.push(food); this.hungry = false; },
speak : function () { return 'Meow'; }
};
必须要分两步走,但是现在可以不必了
var Dog = {
name : 'dog',
paws : 4,
hungry : false,
eaten : null,
play : function () { this.hungry = true; return 'playing!'; },
speak : function () { return 'Woof!'; }
};
var dog = Object.create(Dog);
Object.create他还有第2个参数,是一个properties
descriptor object
,关于这方面的详细解释,请看第2点。
另外:如果浏览器不支持Object.create,可以用这种方法代替
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
Browser
Support
○ Firefox
4
○ Internet
Explorer 9
○ Safari
5
○ Chrome
5+
Function
2: Object.defineProperty
如果你想为一个对象定义属性,那么就必须my_dog.age
= 2;
用这种方法。但是在ECMAScript5中,提供了更好的包装方法Object.defineProperty
Parameters:
1.对象引用
2.属性名
3.修饰对象
修饰对象中的定义如下:
● value:
use this to set the value of a property. Defaults
to undefined
.
● writable:
use this boolean to define whether this is a read-only variable. If
it’s writable, it’s true
.
Defaults to false
.
● configurable:
use this boolean to define whether the type (value vs. method) of
this property can be changed, or whether the property can be deleted.
If it’s configurable, it’s true
.
Defaults to false
.
● enumerable:
use this boolean to define whether this property is included when the
properties of the object are enumerated (a for-in
loop
or the keys method). Defaults to false
.
● get:
use this to define a custom getter method. Defaults to undefined
.
● set:
use this to define a custom setter method. Defaults to undefined
.
Sample:
var Dog = {
name : 'dog',
paws : 4
};
var dog = Object.create(Dog);
Object.defineProperty(dog, 'age', {
set : function (age) { this.humanYears = age * 7; },
get : function () { return this.humanYears / 7; },
enumerable : true
});
dog.age = 2;
dog.humanYears; // 14
以上代码让age和humanYears保存了同步,如果你不想对外界暴露humanYears,可以这样使用闭包:
Object.defineProperty(dog, 'age', (function () {
var humanYears;
return {
set : function (age) { humanYears = age * 7; },
get : function () { return humanYears / 7; },
enumerable : true
};
}()));
当然,也可以用在Object.create方法上面
var yourDog = Object.create(Dog, {
age : {
get : function () { /* . . . */ },
set : function () { /* . . . */ },
enumerable: true
},
gender : {
value : 'female'
}
});
Browser
Support
○ Firefox
4
○ Internet
Explorer 9
○ Safari
5
○ Chrome
5+
Function
3: Object.defineProperties
当然,如果你想像Object.create方法那样一口气给对象加入很多属性的话,你可以用Object.defineProperties方法
Object.defineProperties(dog, {
age : {
get : function () { /* . . . */ },
set : function () { /* . . . */ },
enumerable: true
},
gender : {
value : 'female'
}
});
注意区别
Object.create和Object.defineProperties第一个参数的不同,Object.create是prototype,而Object.defineProperties是对象
Browser
Support
○ Firefox
4
○ Internet
Explorer 9
○ Safari
5
○ Chrome
5+
分享到:
相关推荐
本人看过《深入浅出ES6》后把一百多页去除水分,总结成十来页的文档,方便快速入门。
12. **ECMAScript5**:ECMAScript是JavaScript的标准,第五版引入了严格模式、对象字面量的改进、JSON支持、函数绑定、数组和对象的新方法等特性。 13. **函数式编程**:虽然JavaScript并非纯函数式语言,但其支持...
随着技术的发展,新的版本不断推出,引入了许多创新特性和改进。以下是一些在ES5、ES6(也称为ES2015)以及ES7(ES2016)中的常见新特性: 1. **保留关键字**:在ES5中,有一些保留关键字如`catch`,不能用作变量名...
ES6,又称为ES2015,是JavaScript历史上最大的一次更新,引入了大量新特性,包括: 1. **类与模块**:引入了类的概念,使得面向对象编程更加简洁。同时,通过`import`和`export`关键字实现了模块化,解决了命名冲突...
ECMAScript6,也称为ES2015,是JavaScript语言的一个重要版本更新,引入了许多新的特性和语法改进,使得代码更加简洁、易读。以下是一些关键的新特性及其范例: 1. **箭头函数**: 箭头函数提供了一种更简洁的函数...
### ECMAScript 5 版本特性解析 #### 引言 随着互联网技术的迅猛发展,JavaScript 作为一种广泛应用于浏览器端的脚本语言,其重要性日益凸显。为了更好地满足开发者的实际需求并提高编程效率,ECMAScript 第五版...
ECMAScript 5(简称ES5)是ECMAScript的一个重要版本,带来了许多新特性,这些新特性在《JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性》中被详细讨论。 ES5相对于之前版本,如ECMAScript 3(简称...
ECMAScript 6,简称ES6,是JavaScript语言的一个重要版本更新,引入了许多新的特性和语法改进。本文将深入探讨其中两个关键特性:`let` 和 `const`。 `let` 是ES6中用于声明变量的新关键字,它解决了在ES5中`var`...
ES6,全称ECMAScript 2015,是JavaScript语言的一个重要版本更新,引入了大量的新特性和语法糖,对前端开发领域产生了深远影响。 1. **变量声明** - `let` 和 `const`: ES6 引入了新的变量声明方式,`let` 用于...
ECMAScript Second Edition javascript新特性2018年7月最新版本
ESLint:ESLint规则详解:ECMAScript6+特性.docx
综上所述,《ECMAScript2016标准入门(第三版)》不仅详细介绍了ES2016的新特性,而且还提供了丰富的示例帮助读者理解和应用这些特性。无论是对于初学者还是有一定经验的开发者来说,这本书都是学习ES2016不可多得的好...
本教程大纲: 0. 前言 1. ECMAScript 6简介 2. let 和 const 命令 3. 变量的解构赋值 ...一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? 要讲清楚这个问题,需要回顾历史。1996 年 11 月
### ECMAscript基础知识点详解 #### 一、ECMAscript概述 ECMAscript,通常简称ES,是一种脚本语言的标准规范,由欧洲计算机制造...随着ECMAScript标准的不断演进,掌握其最新特性和最佳实践对于开发者来说至关重要。
然后,我们来看看ECMAScript 6(ES2015),这是一个里程碑式的更新,引入了大量的新特性,旨在提升代码的可读性和模块化。以下是一些关键的ES2015特性: 1. **类和模块**:在ES2015中,JavaScript引入了类的概念,...
ECMAScript 6入门是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新增的语法特性
简单来说,ECMAScript是一种规范或标准,而JavaScript是一种具体的实现,即一种编程语言,它遵循ECMAScript标准。 1. **ECMAScript**: 是一种脚本语言的标准,由ECMA国际组织制定。它定义了脚本语言的核心特性,...
ES5引入了一系列新的API和特性,例如Object.create()、Object.defineProperty()、getters和setters、严格模式以及JSON对象等,这些改进虽然增强了JavaScript的功能,但并未深入影响到编程风格。ES6则不然,它引入了...
ECMAScript,通常简称为ES,是JavaScript编程语言的标准,由欧洲计算机制造商协会...随着ECMAScript的不断演进,如ES6引入的模块系统、箭头函数、类和解构赋值等新特性,开发者需要持续学习和掌握最新的语言标准。
资源名称:ECMAscript2018规范内容简介:ECMAscript 2018(第九版 JS)已于 6 月底正式发布,带来了许多新特性。ECMAscript 2018 于今年2月出炉草案,TC39 技术委员会每两个月开会一次,讨论当前...