未加星标

javascript 跳跃式前进 (4) - 对象基础理论

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏
前言

ECMAScript中我觉得非常重要的一块就是对于对象的理解了,就我个人而言,我的理解还是不够透彻的;

所以这篇文章不扯多深,只扯扯比较表层的知识;

何为面向对象

面向对象的定义是比较好比喻的,比如一个人,有什么特征,这是特征就是对象属性,而不同的人又相同的地方和自身亮点;

这样就是从单一对象过渡到继承,拓展;[ 注:ES6之前没有类的说法,原生的继承也是不存在的;模拟居多 ]

ECMA的定义就是: “无序属性的几何,其属性可以包含基本值,对象或者函数.”

在JS中,声明对象的方法有这么两种:声明和字面量;

var x = {}; //字面量 vay y = new Object(); //声明式 x.name = "crper" //设置属性 Object {name: "crper"}

然而,从ES5开始,规范和定义就越发丰富了,现在我们来扯扯ES5新增或者完善老版本的;

属性类型

ECMAScript中有两种属性: 数据属性和访问器属性;

数据属性有四个行为特性: 1. [[Configurable]] : 若是设置为true,可以通过delete删除属性;若是false,则不可!!! 默认为true; 2. [[Enumerable]] : 是否允许for-in这类循环遍历属性值,默认为true; 3. [[Writable]] : 是否允许修改对象的属性值,默认为true; 4. [[Value]] : 对象的属性值,默认为undefined; 若是要修改其对象的行为特性,需要用 Object.defineProperty 来实现[也可以理解为定义对象属性],

格式: Object.defineProperty(obj,attribute,{行为特性或带值}) 看demo;

var x = {}; x.name = "crper"; /*非严格模式下,操作age这个值会忽略;严格模式会直接抛出异常; 因为writable 阻止了; 而当你设置了configurable这个值为false的时候,非严格模式下删除对象属性值,会忽略; 严格模式也会直接抛出异常; 若是要修正这些问题,只能再次调用Object.defineProperty来修改特性,允许多次调用; 默认情况下,你调用了Object.defineProperty,但不设置特性的情况下, 会把configurable[操作],enumerable[枚举属性],writable[读写]都设置为false; */ Object.defineProperty(x,"age",{ writable:false, configurable:false, value:23 }) 访问器属性有四个特性: 1. [[Configurable]] : 与数据属性一致; 2. [[Enumberable]] : 与数据属性一直; 3. [[Get]] : 在读取属性的时候调用函数,默认值为undefined; 4. [[Set]] : 在写入属性值的时候调用函数,默认值为undefined; /*getter 和setter 就我个人所知的其中一个作用,就是隐藏设置值; ES5严格模式中,不可以单独设置getter,会报错!!! 直接搬<<JS高级编程第三版的例子>> */ var book = { _year:2004, edition:1 }; Object.defineProperty(book,"year",{ get:function(){ return this._year; }, set:function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } } }); book.year = 2005; console.log(book.edition); // 2 /*这个例子中,getter不做任何设置,直接返回值; setter里面进行了一个判断, 若是年份大于当前的设置的年份,年份为设置的值且版本加上设置年份减去已有年份的值*/ 定义多个属性 /* 用法相当简单,基本和defineProperty一致,唯一的区别就是支持多个属性的同时设置 */ var my = {}; Object.defineProperties(my,{ name:{ value:"crper" }, age:{ value:23 }, read:{ get:function(){ return this.age; }, set:function(value){ if(value > 24){ return this.age = (value - 24); } } } }); 读取属性特性

读取属性特性可以使用 Object,getOwnPropertyDescriptor(obj,attribute) 方法;

返回值是数据属性和访问器属性

接着上面一个例子;

Object.getOwnPropertyDescriptor(my,"age") ; //Object {value: 23, writable: false, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(my,"name"); //Object {value: "crper", writable: false, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(my,"read"); //Object {enumerable: false, configurable: false} 创建对象 .... 梳理中 ... 放到下一篇相关的文章 总结

至于对象的几种创建模式及继承的实现,我还要梳理一下,顺便把ES6的实现方法也穿插进去。。。

静候佳音~~~学习ing。。。。。

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: ECMAScript数据删除
分页:12
转载请注明
本文标题:javascript 跳跃式前进 (4) - 对象基础理论
本站链接:http://www.codesec.net/view/484357.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(29)