JavaScript 对象

JavaScript的对象也是一个变量,但是对象可以包含多个值 (使用键值对的写法 key:value)

var man= '18';
var man={
  name:"lisi";
  age:"18";
}
//这两种都可以说是对象

访问对象的两种方法一个是通过 . 符号 或者是中括号[]

man.age  和  man["age"]
访问出来结果是一样的

对象的方法可以定义一个函数

对象的属性之间一定要用逗号隔开;

对象的方法定义了一个函数,并作为对象的属性存储。

对象方法通过添加 () 调用 (作为一个函数)。

也可以通过new object 来使用自定义构造函数的方式来初始化对象

var person = {
    firstName: "John",
    lastName : "Doe",
    id : 5566,
    fullName : function() 
	{
       return this.firstName + " " + this.lastName;
    }
};
console.log(person.fullName())//记得加上括号,输出的值为 John Doe
console.log(person.fullName) //无括号 输出的值为function() { return this.firstName + " " + this.lastName; }   显示其的函数属性 

使用new object  创建对象
var person=new Object();
person.name='小明';
person.sex='男';
person.method=function(){
  return this.name+this.sex;
}

实现对对象遍历(这里使用的是 for..in  方法)

//创建对象  属性的定义相当于:key  : string
var person = {
    firstName: "John",
    lastName : "Doe",
    id : 5566,
};
//循环遍历 输出结果

for(var key in person){
  console.log(key+"--"+obj[key]);
}
结果:

firstName--John
lastName-Doe
id--5566

深入了解对象 

ECMAScript中有两种属性:数据属性、访问器属性。

数据属性:(个人看法:是对使用object.defineProperty 创建的对象内在属性的设置;

Object.defineProperties()   这个是定义多个的)

【Configuration】 设置定义属性是否能通过delete删除;默认值是true

【Enumerable 】 设置定义属性能否通过for in 循环来返回属性;默认是true

【Writable 】 设置定义属性能否修改属性的值

【Value】 设置属性的添加数据

使用Object.getOwnPropertyDescriptor()来查询属性

var person={
   name:'zhangsan',
   age:18
}
//添加
Object.defineProperty(person,'like',{
   configurable:true,
   enumerable:true,
   writable:true,
   value:'play'
})
//试一试输出结果
console.log(person.like); 
//可以试一试将其他结果改成false 看看结果
Object.defineProperty(obj,"like",{wirtable:false})
person.like='eat'
console.log(person.like)
//输出结果还是play
var desc = Object.getOwnPropertyDescriptor(person,'like')
console.log(desc)
结果为
{
   configurable:true,
   enumerable:true,
   writable:true,
   value:'play'
}

访问器属性:这个属性不包含数据,包含一对get和set方法(双向绑定的原型),但是访问器不能直接定义必须使用object.defineProperty()方法来定义。可以通过Object.getOwnPropertyDescriptor()查询

包含四个属性:

【Configuration】 设置定义属性是否能通过delete删除;默认值是true

【Enumerable 】 设置定义属性能否通过for in 循环来返回属性;默认是true

【get】  读取数据时调用函数,默认为undefined

【set】 写入属性时调用的函数,默认值为undefined

var person={
  name:'zhangsan',
  _age:'18'
}

Object.defineProperty(person,'age',{
      get: function(){ 
         return this._age;  
      },
      set: function(year){
        if(year>this._age){
          this._age=year   //这个是通过一个绑定转换数据
          this.name='lisi'  //因为name是全局函数,这个是直接改变数据,未绑定
        }
      }  

});
console.log(person.age);
person.age=19;
console.log('修改过的'+ person.age);
console.log(person.name);
//输出结果
console.log(person.age);
person.age=19;
console.log('修改过的'+ person.age);
console.log(person.name);

//文章是去看了其他人的内容书写的,太多人了,我没办法一一找到链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值