javaScript 对象

JavaScript 对象

1. 生成方法

对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。

什么是对象?
简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

var obj = {
	foo: 'Hello',
	bar: 'World' 
};

上⾯代码中,⼤括号就定义了⼀个对象,它被赋值给变量 obj ,所以变量 obj 就指向⼀个对 象。该对象内部包含两个键值对,第⼀个键值对是 foo: ‘Hello’ ,其中 foo 是“键名”,字符 串 Hello 是“键值”。键名与键值之间⽤冒号分隔。第⼆个键值对是 bar: ‘World’ , bar 是 键名, World 是键值。两个键值对之间⽤逗号分隔。

2. 对象的相关概念
  1. ECMAScript是基于对象(Object)的,对象是属性(properties)的集合,每个属性有零个或多个特性(attributes),它确定怎么使用此属性。
  2. ECMAScript通过对象确定调用者要调用的地方,通过调用对象的属性和方法可以来满足调用者要怎么调用对象。
  3. ECMAScript对对象的定义:无序属性的集合,其属性可以包含基本值、对象或者函数。
  4. 对象是属性的集合,并有一个原型对象。原型可以是空值。严格来说,这就相当于说对象是一组没有特定顺序的值。
  5. 对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。正因为这样,我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。
  6. JavaScript本身包含许多对象,这些对象称之为JavaScript的内建对象。
  7. 浏览器自身也是对象集合的模型,可以通过浏览器对象来操作浏览器,浏览器对象模型(BOM),文档对象模型(DOM)。
  8. 对象的存在是为了解决基本数据类型的局限性。
  9. 对象是自我包含的数据集合,包含在对象里的数据可以通过两种形式——即属性(property)
    和方法(method)访问:
    a:属性是隶属于某个特定对象的变量;
    b:方法是只有某个特定对象才能调用的函数。
  10. 实例是对象的具体表现:对象是统称,实例是个体。
  11. 有些对象(如:person)在JavaScript语言里并不存在。我们可以利用JavaScript语言
    来创建自己的对象——术语称之为用户定义对象(user-defined object)。有些对象
    (如:Array、Date)在JavaScript语言中预先定义好的对象,而我们可以把这些对象直接在
    自己的脚本里运用,人们把这些对象称为内建对象(native object)。
3. 对象的属性

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

  • 数据属性
/*
    数据属性包含一个数据值的位置,在这个位置可以读取和写入值
*/
var person = {
    name : "Nicholas"
};
>/操作数据属性
/*
    通过delete、add来操作数据属性
    对未声明的数据属性进行赋值相当于先创建这个属性然后再对这个属性进行赋值
*/
'use strice'
var person = {
    name : "personName",
    age : 23
}
delete person.age;
person.type = 'chinese';
console.log(person);//{name: "personName", type: "chinese"}

>/通过Object.defineProperty()
/*
    可以通过
      Object.defineProperty(ObjectName , attrituteName , 
                           {descriptor : true/false});
    来操作对象的属性
*/
'use strice'
var person = {
    name : "personName",
    age : 23
}
console.log(person);//{name: "personName", age: 23}
person.name = "hh";
console.log(person);//{name: "hh", age: 23}
// Object.defineProperty(person,"name",{
//     writable : false
// })//标准格式
Object.defineProperty(person,"name",{
    writable : false,
    value : "kk"
})
console.log(person);//{name: "kk", age: 23}
person.name = "gg";
console.log(person);//{name: "kk", age: 23}
  • 访问器属性
/*
    访问器属性不包含数据值:它们包含一对儿getter和setter函数(不过这两个函数都不是
必需的)。
        
    在读取访问器属性是,会调用getter函数,这个函数负责返回有效值;
    
    在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据
*/

>/ 操作访问器属性
//访问器属性:yyy
'use strice'
var book = {
    _year : 2004,
    edition : 1 
       
};
console.log(book);
Object.defineProperty(book,"yyy",{
    get:function(){
        return this._year;
    },
    set:function(newValue){
        if(newValue > 2004){
            this.edition += newValue - this._year;
            this._year = newValue;
        }
    }
});
console.log(book.yyy);
book.yyy = 2008;
console.log(book.yyy);
console.log(book);
4. 设置和读取对象中的属性
//1、设置某个属性的特性
Object.defineProperty(ObjectName , attrituteName , 
                      {descriptor : true/false});
//2、设置多个属性的特性
Object.defineProperties(ObjectName , {attrituteName : 
{descriptor : true/false} , attrituteName : {descriptor : true/false}});
//3、读取属性的特性
var descriptors = Object.getOwnPropertyDescriptor(ObjectName,attrituteName);
console.log(descriptors.descriptorName);
5. 变量存储的是对象的引用
  1. 当我们创建对象并把创建的对象赋值给一个用var声明的变量,这个变量中存储的是这个对象的地址,是这个对象的引用而不是对象本身的赋值。
  2. 由于变量存储的是对象的引用,所以一些看似是对该变量‘对象’的操作,其实实质上是对这个变量包含的引用所指向的对象的操作,而不是对这个变量的操作,因为这个变量中不是什么对象,而是一个地址引用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值