【笔记】 《js权威指南》- 第9章 类和模块 - 9.8 类 ECMAS5
来源:互联网 发布:php 跨域 header 编辑:程序博客网 时间:2024/05/21 15:02
1.让属性不可枚举:
(function () {Object.defineProperty(ClassA.prototype, "propA", {get: propAGetter,set: propASetter,enumerable: false,configurable: false});function checkPropA(self) {if (!(_propAName in self)) {if (!Object.isExtensible(self)) {throw new Error("can't define propA for nonextensible obj");}Object.defineProperty(self, _propAName, {writable: true,value: _propA,enumerable: false,configurable: false});}}function propASetter(v) {checkPropA(this);this[_propAName] += v;};function propAGetter() {checkPropA(this);return this[_propAName];};var _propAName = "_propA";var _propA = 1;})();var b = new ClassB(1, 2, 3);for (var prop in b) {console.log(prop);}b.propA = 4;console.log(b.propA);
打印结果:getParamB, setParamB, porpC, constructor, funcA, funcB, 6
注意不是5,因为在B的构造函数中继承了ClassA的代码this.propA = paramA;
2.定义不可变的类:
定义一些工具函数:e.g.
//将制定名字或者所有的属性设置为不可写以及不可配置的function freezeProps(o) { var props = (arquments.length == 1) ? Object.getOwnPropertyNames(o) : Array.prototype.splice.call(arguments,1); props.forEach(function(n) { if (!Object.getOwnPropertyDescriptor(o, n).configurable) return; Object.defineProperty(o, n, {writable: false, configurable: false}); }); return o;}
3.封装对象的状态:
将setter,getter函数更为严格地进行封装:
function setAndGetProp(o, p, g, s) {var obj = {enumerable: true, configurable: false};if (g) obj.get = g;if (s) obj.set = s;Object.defineProperty(o, p, obj);}
//定义构造函数function ClassA(paramA, paramB) {//定义实例字段this.propA = paramA;function getParamB() {return paramB;};function setParamB(value) {paramB = value;};setAndGetProp(this, "paramB", getParamB, setParamB);}
0 0
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.8 类 ECMAS5
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.9 模块
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.5 类和类型
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.3 Java式继承
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.7 子类
- JavaScript权威指南第09章 类和模块
- JavaScript权威指南_79_第9章_类和模块_9.9-模块
- JavaScript权威指南_71_第9章_类和模块_9.1-类和原型
- JavaScript权威指南_75_第9章_类和模块_9.5-类和类型
- JavaScript权威指南_74_第9章_类和模块_9.4-类的扩充
- JavaScript权威指南_78_第9章_类和模块_9.8-ES5中的类
- JavaScript权威指南_70_第9章_类和模块_9.0-概述
- JavaScript权威指南_77_第9章_类和模块_9.7-子类
- JavaScript权威指南学习之第9章 类和模块
- JavaScript权威指南笔记5_类和模块
- JavaScript权威指南_72_第9章_类和模块_9.2-类和构造函数
- JavaScript权威指南_73_第9章_类和模块_9.3-JavaScript中Java式的类继承
- JavaScript权威指南_76_第9章_类和模块_9.6-JavaScript中的面向对象技术
- Python 中文乱码
- hdu5656CA Loves GCD(dp)
- 深入浅出K-Means算法
- Java进阶01 String类
- 设计模式:责任链模式(Chain of Responsibility)
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.8 类 ECMAS5
- Mysql主从同步备份策略分享(实验修正版)
- 整理最全的Android开发工程师面试题,面试题详解。java、Android程序员
- JDK8——使用lambda编程
- 多样式ProgressBar 和ProgressDialog
- 送货
- linux系统性能优化及瓶颈分析
- Cache和Buffer的区别
- 判断操作是否合法A