javascript学习笔记 - 面向对象 理解对象
ECMAScript 中有两种属性:数据属性和访问器属性
一 属性类型
1.数据属性。数据属性有4个描述其行为的特性
[[Configurable]]表示能否通过delete删除属性从而重新定义属性; 能否修改属性; 能否把属性修改为访问器属性。
[[Enumerable]] 表示是否能通过for-in循环进行枚举。
[[Writable]] 表示能否修改属性的值
[[value]] 包含这个属性的值。读取和写入属性值,都是从这个位置来操作
对象字面量初始化时定义的属性,这些特性默认都是为true。
Object.defineProperty(object, property, descriptor) //descriptor 称为描述符对象
var person = {};
Object.defineProperty(person, "name", {
writable: false, //将对象属性设置为属性值不可修改
value: "Nicholas" //初始化属性name的值。因为包含value特性,因此"name"属性是数值属性
});
alert(person.name); // Nicholas
person.name = "Greg";
alert(person.name); // Nicholas
[[Configurable]] 特性如果设置为false,则不能使用delete删除这个属性。并且只能修改writable这个特性,其他的属性都将不能再修改。
2.访问器属性
访问器属性不包含数据值。属性由[[Configurable]] 和 [[Enumerable]] 组成。[[Get]] 和 [[Set]] 属性不是必须的。
[[Get]] 和 [[Set]] 属性类似于PHP中的魔术方法。
var book = {
_year:2004,
edition:1
};
Object.defineProperty(book, "year", {//因为设置了get、set特性,因此"year"属性为访问器属性。不能再有value,writable特性
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue -2004;
}
}
});
book.year = 2005;
alert(book.edition); //2
只指定getter意味着属性是不能写。只指定setter意味着属性不可读。
不支持Object.defineProperty()方法的浏览器,使用非标准方法:
obj.__defineGetter__ 和 obj.__defineSetter__
不支持Object.defineProperty()的浏览器不能修改[[Configurable]],[[Enumerable]] 这两个特性
二 定义多个属性
Object.defineProperties() 定义多个属性
var book;
Object.defineProperties(book,{
_year : { value : 2004 }, //数据属性
edition : { value : 1 }, //数据属性
year : { //访问器属性
get : function(){
return this._year;
},
set: function(){
....
}
}
});
三 读取属性的特性
Object.getOwnPropertyDescriptor(obj,attributeName)
obj -- 属性所在的对象 、attributeName -- 要读取其描述符的属性名称。返回一个对象,根据属性的类型(数据属性、访问器属性),返回不同的4个特性的值。
javascript学习笔记 - 面向对象 理解对象的更多相关文章
- JavaScript:学习笔记(9)——Promise对象
JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...
- JavaScript:学习笔记(10)——XMLHttpRequest对象
JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...
- Javascript学习笔记——操作浏览器对象
Javascript学习笔记 目前尝试利用javascript去对于一个浏览器对象完成一系列的访问及修改, 浏览器是网页显示.运行的平台,常用的浏览器有IE.火狐(Firefox).谷歌(Chrome ...
- javascript学习笔记02--面向对象学习
js面向对象编程 1. javascript 是一种基于对象的编程 object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...
- JavaScript学习笔记之原型对象
本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...
- JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
- JavaScript学习笔记-面向对象的模块化编程
面向对象的模块化编程 模块是一个独立的JS文件,模块文件可以包含一个类定义.一组相关的类.一个实用函数库.一些待执行的代码 模块化的目标:支持大规模的程序开发,处理分散源代码的组装,并能让代码正确执行 ...
- 1.4(JavaScript学习笔记) window对象的属性及方法
一.window对象 window对象代表当前窗口,所有全局对象都是windows的属性, 例如document是window的属性,window.document.writer("&quo ...
- JavaScript学习笔记之BOM对象
目录 1.Window 2.Window Screen 3.Window Location 4.Window History 5.Window Navigator 浏览器对象模型(Browser Ob ...
随机推荐
- 让您的Eclipse具有千变万化的外观
大家每天用Eclipse做Java开发,是否厌倦了Eclipse千篇一律的白色背景呢? 看看Jerry这几种不同风格的Eclipse外观,是不是有耳目一新的感觉?如何做到的? 需要给Eclipse安装 ...
- Android(java)学习笔记134:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- DROP RULE - 删除一个重写规则
SYNOPSIS DROP RULE name ON relation [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP RULE 删除一个规则. PARAMETE ...
- DROP OPERATOR CLASS - 删除一个操作符类
SYNOPSIS DROP OPERATOR CLASS name USING index_method [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP OPER ...
- Web前端 优化方案
1.减少Http请求 在一个页面中图片,CSS,JS可能N个,如果每个资源都去请求一次服务器的话,那么服务器就会为每个资源开一个线程来完成,这样的话对服务器的压力就很大了.所以解决的方法就是合并资源 ...
- C#MySQL增删改查
首先在项目中添加引用 using MySql.Data.MySqlClient; 连接字符串 private string connString="server=localhost;use ...
- Check for Palindromes-freecodecamp算法题目
Check for Palindromes(检查回文字符串) 要求 给定的字符串是回文,返回true,反之,返回false.(如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个 ...
- MYSQL不能显示中文字,显示错误“ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89'”
或者建表时带上编码utf8 CREATE TABLE `students`( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR( ...
- React 基础知识总结
data-id="1190000016885142" data-license=""> 一.Node.js Node.js并不是一个JavaScript框 ...
- 动态设置html的title
使用vue前端框架做,竟然丢弃了很多javascript和html的东西了..动态设置title的方法: 1.使用vue的自定义指令 <div v-title>{{htmltitle}}& ...