JavaScript 对象的基本知识
js对象和属性的基本定义
(function(){
$(document).ready(function(){
return "object define";
//创建对象实例
var person = new Object();
person.name = "Nicholas";
person.age = 29;
person.job = "Software Engineer";
person.sayName = function(){
alert(this.name);//this代表的是本对象,就是调用这个方法的对象person
};
//常用的对象字面量语法
var person = {
name : "Nicholas",
age : 29,
job : "Software Engineer",
//最后一个属性,不需要加逗号
sayName : function(){
alert(this.name);
}
};
});
})();
属性类型的基本应用
1、数据属性
(function(){
return;
$(document).ready(function(){
//对象的属性类型(property) 数据属性和访问器属性
//数据属性
//[[Configurable]] : 是否可以通过delete 删除属性从而重新定义、能否修改属性的特性,或者把属性改为访问器属性
//[[Enumerable]] : 表示能否用for-In 循环返回属性
//[[Writable]] : 表示是否可以修改属性的值
//[[Value]] : 保存这个属性的值。 这个值默认为undefined
/*
**直接在对象上定义的属性, 他们的数据属性,[[Configurable]] [[Enumerable]] [[Writable]] 默认都为false [[Value]] 则为设置的值
**
*/
var person = {};
//参数为, 对象、属性、描述符对象
Object.defineProperty(
person,
"name",
{
writable:false, //person对象的属性name的值不允许修改,为只读
value : "Nicholas"
}
);
person.name = "Greg"; //name 为只读,非严格模式下会忽略, 严格模式下会报错
console.log(person.name);// "Nicholas"
Object.defineProperty(
person,
"age",
{
configurable:false,
value:25,
writable : false,
enumerable:false
}
);
console.log("删除属性age前的值:"+person.age);
delete person.age;
console.log("删除属性age后的值:"+person.age);//configurable 设置了false,此属性age不可更改,不能删除
try{
Object.defineProperty(
person,
"age",
{
configurable:true,
value : 33
}
); //严 格模式下会报错
}
catch(e){
console.log("定义的age属性的configurable为不可以修改,所以不能重新修改属性的配置,也不能删除"+e.message);
}
console.log("age1:"+person.age);
person.age = 44;
console.log("age2:"+person.age);
try{
Object.defineProperty(
person,
"age",
{
writable:true,
value : 34
}
);
}
catch(e)
{
console.log("定义的age属性的configurable为不可以修改,所以不能重新修改属性的配置,也不能修改writable属性"+e.message);
}
person.age=44;
console.log("age3:"+person.age);
console.log("===========");
try{
Object.defineProperty(
person,
"age",
{
enumerable:true
}
);
}
catch(e)
{
console.log("定义的age属性的configurable为不可以修改,所以不能重新修改属性的配置,也不能修改enumerable属性"+e.message);
}
Object.defineProperty(
person,
"job",
{
enumerable:true,
value :""
}
);
for(var property in person)
{
console.log("person对象的属性有:" + property);
}
console.log("age属性设置了不可枚举和name属性可枚举默认为false,所以只有job设置了可枚举的数据属性。");
});
})();
2、访问器属性
(function(){
/*访问器属性 getter和setter两个函数
[[Configurable]] :同“数据属性”的解释
[[Enumerable]] :同“数据属性”的解释
[[Get]]:读取属性时的值 默认值为undefined; 设置之后表示可读。
[[Set]]:写入设置时属性的值 默认值 undefined; 设置之后表示可写。
[[Get]] / [[Set]] 只能在Object.defineProperty();中定义
*/
$(document).ready(function(){
var book = {
_year:2004,//加_标记的时候,一般表示只能通过对象中的方法访问,不使用直接访问方式。如getyear(); 这个常用的标记。
edition:1,
num:2,
getyear:function(){
return this._year;
}
};//此定义是数据属性方式的定义;
Object.defineProperty(
book,
"year",
{
get:function(){
return this._year;//this代表的是本对象,就是调用这个方法的对象book
},
set:function(value){
if(value > 2004)
{
this._year = value;
this.edition = this.edition + value - 2004;
}
}
}
);
book.year = 2006;
console.log("book.edition:"+book.edition);
console.log("book._year:"+book.getyear());
// 严格模式下。如果只设置了get属性,为只读,做写入操作会报错。只设置set属性,为只写不可读,做读取操作的时候会报错 。
//非严格模式下,只写的属性,读取的时候返回undefined。
Object.defineProperty(
book,
"author",
{
set:function(value){
this.author = value;
}
}
);
console.log(book.author);//undefined
//ECMAScript 5之前有访问器属性的两个非标准的方法: _defineGetter_ 和 _defineSetter_
console.log("ECMAScript 5之前有访问器属性的两个非标准的方法: _defineGetter_ 和 _defineSetter_");
book.__defineGetter__("pageNum",function(){
return this.num;
});
book.__defineSetter__("pageNum",function(value){
this.num = value;
});//set 不能设置本属性的值。否则造成循环设置。内存溢出。
console.log("book.pageNum:"+book.pageNum);
book.pageNum = 500;
console.log("book.pageNum:"+book.pageNum);
//设置多个属性值,数据属性和访问器属性可以一起用。
var person = {};
Object.defineProperties(
person,
{
_name : {
value : "Nicholas",
writable:true
},
age :{
value:33
},
name :{
get:function(){
return this._name;
},
set:function(value){
this._name = value;//必须设置writable = true 才能修改_name的值
}
}
}
);
console.log(person._name); //Nicholas
console.log(person.age);
person.name = "Greg";
console.log(person._name); //Greg
//读取属性的特性
console.log("读取属性的特性");
var descriptor = Object.getOwnPropertyDescriptor(person,"_name");
console.log(descriptor.value); // Greg
console.log(descriptor.configurable); //false;
console.log(descriptor.get); //undefined
console.log(descriptor.set); //undefined
console.log(descriptor.writable); //true
console.log(descriptor.enumerable);//false
});
})();
JavaScript 对象的基本知识的更多相关文章
- javascript——对象的基础知识
一.javascript作为脚本语言可以完成以下任务: 操纵浏览器对象,如窗口的打开与关闭: 操纵Dom树: 通过XMLHttpRequest对象与服务器端进行异步通信: XML编程,借助于Activ ...
- JavaScript对象属性的基础教程指南
JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...
- JavaScript对象基础知识总结
1.什么叫JavaScript对象? 定义:名值对的集合.简单的讲就是容纳属性值和属性值的容器,这些属性可以是无序的,基本上JavaScript中所有的事物都可以看成对象. 拓展:我们经常说,数组也是 ...
- 摘:JavaScript性能优化小知识总结
原文地址:http://www.codeceo.com/article/javascript-performance-tips.html JavaScript的性能问题不容小觑,这就需要我们开发人员在 ...
- javascript对象的一点理解
<script type="text/javascript"> /* js对象:对象的职责是调用属性和调用方法 */ //1.对象的创建的三种方式 var obj = ...
- 关于JavaScipt对象的基本知识
关于JavaScipt对象的基本知识 JavaScript是运用“对象化编程”的,又叫“面向对象编程”的.所谓“对象化编程”,意义是把JavaScript能涉及的领域划分成各种对象,对象后面还连续划分 ...
- Javascript对象属性与方法汇总
Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...
- 【知了堂学习笔记】/JavaScript对象--/暖妮
JavaScript对象 1.什么是JavaScript对象? JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. ...
- 第五章 JavaScript对象及初识面向对象
第五章 JavaScript对象及初识面向对象 一.对象 在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. 在JavaScript对象分为内置对象和自定义对象,要处理一些 ...
随机推荐
- 算法入门笔记------------Day1
1.C语言使用%d显示float值,不会把float值转换为近似的int值,而是显示垃圾值,使用%f显示int值,也不会把该int值转换为浮点值 2.三位数反转:输入一个三位数,分离它的百位,十位和个 ...
- Thread and ThreadPool
C#中Thread与ThreadPool的比较 Thread类,一次使用一个线程,来创建和删除线程.这种方式建立和删除线程是很昂贵的(cpu密集型). Threadpool类 对于大多数的情况下是使用 ...
- .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
前言 一直以来,从事的是.net winform的编程,虽然对移动互联这块很感兴趣,但是由于现有的工作和移动互联之间隔的太远,也就没有时间和精力好好的去研究和实现.今年年初辞职了,刚好朋友那里希望建立 ...
- 个人博客作业week3——案例分析
1.调研 & 评测 1.我的用户体验 win10应用版: Bug1:例句经过翻译与其给出的译文相差太多 上图是应用给出的每日一句及其译文. 将其复制入翻译,就可以看出翻译过后的句子一点也不通顺 ...
- 日常工作中的点滴:C# 根据字节长度截包含中文的字符串
方法中利用正则表达式判断某个字符是否是中文 public string SubStringB(string text,int length){ int target=0; int b=0; for(i ...
- iOS Developer:真机测试
如果出现ios development一项为灰色不可点击状态,苹果的说法是 如果您要为此电脑添加证书,请revoke以前的证书后添加,或者通过以前的mac导出证书 原文不记得了,大概这个意思,苹果不希 ...
- PCFG -- 基于统计方法生成语法树
语法树的作用 一棵语法树不仅包括了词性(part of speech), 还包括了短语(如名词短语, 动词短语)和结构化的信息(如主语, 谓语和宾语). 这些信息是进行机器翻译所必须的, 例如机器翻译 ...
- PN结的形成
P型半导体 在纯净的硅晶体中掺入3价元素如硼,使之取代晶格中硅原子的位置,就形成了P型半导体.在P型半导体中,空穴为多字,自由电子为少子,主要靠空穴导电.掺入的杂质越多,空穴的浓度就越大,导电性就越强 ...
- ZabbixCPU温度监视-Centos
ZabbixCPU温度监视 1, lm_sensors安装 #yum install lm_sensors … #sensors-detect 出来的选项全部选yes 重启服务器 2, lm_sens ...
- dubbo分布式rpc框架用法
dubbo是阿里巴巴开源的分布式服务框架,致力于提供高性能和透明化的rpc远程服务调用方案,以及soa服务治理方案,如果没有分布式需求,是不需要dubbo的,分布式环境dubbo的使用架构官方给出了一 ...