美文网首页学习笔记
数值属性和访问器属性

数值属性和访问器属性

作者: 一个人夜里安静的发呆 | 来源:发表于2018-02-23 16:05 被阅读0次

'use strict'

//方法1:创建一个实例,再给它赋属性和方法

var person =new Object();

person.name="Jiaweiyuan";

person.age=23;

person.job="student";

person.sayName=function(){

console.log("name:"+this.name);

};

// 方法2:对象字面量

var person1={

name:"Zhouquan",

age:23,

job:"student",

sayName:function(){

console.log("name:"+this.name);

}

};

/*6.1.1 属性*/

/*1.数据属性:*/

//  [[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性或者把属性修改成访问器属性。新定义的对象默认值是true

//  [[Enumerable]]:表示能否通过for-in循环返回属性,新定义的对象默认值为true

//  [[Writable]]:表示能否修改属性的值,新定义对象默认值为true

//  [[Value]]:包含这个属性的数据值,写入/读取数据值的时候,都从这个位置写入/读取

// ES5才出现的,描述了内部特征,不能直接访问,是为了实现javascript的引擎用的,放在两对儿方括号中、

var person2={

name:"Quanshushu"

};

//[[Value]]特性被设置为"Quanshushu",这个值若修改都会被反应在这个位置

/**/

//ES5的Object.defineProperty()方法用来修改属性的默认特性

//Object.defineProperty('属性所在的对象','属性的名字','描述符对象')

Object.defineProperty(person2,"name",{

writable:false,

enumerable:false

});

try{

person2.name="Zhoudeng";

//因为[[Writable]]特性值被修改成false,所以name属性没有被修改

//严格模式下,以上操作会报错

}catch(e){

// console.log(e.message);

}

/**/

// 关于[[Configurable]]特性有以下注意

try{

Object.defineProperty(person1,"name",{configurable:false});

delete person1.name;//result:"Cannot delete..."

}catch(e){

// console.log(e.message);

}

try{

Object.defineProperty(person1,"name",{configurable:false});

// Object.defineProperty(person1,"name",{configurable:true});//error,一旦把属性定义为不可配置的就不能重新定义为可配置的了

Object.defineProperty(person1,"name",{writable:true});//[[Configurable]]特性被设置为false之后,只有[[writable]]特性可以更改

person1.name="asd";

// console.log(person1.name);//result:"asd"

}catch(e){

console.log(e.message);

}

/**/

/*2.访问器属性:*/

//不包含数据值,包含一对儿getter和setter函数(但都不是必须的)

var salary={

_data:2350,//前面的下划线是一种记号,用于表示只能通过对象方法访问的属性

grade:"普通员工",

};

/*支持此方法的浏览器:IE9+,FF4+,SF5+,O12+,Chrome*/

Object.defineProperty(salary,"data",{

get:function(){

return this.data;

}

,

set:function(newValue){

if(newValue>=2350&&newValue<8950){

this._data=newValue;

this.grade="初级工程师";

}

else if(newValue>=8950&&newValue<18950){

this._data=newValue;

this.grade="中级工程师";

}

else if(newValue>=18950&&newValue<28950){

this._data=newValue;

this.grade="高级工程师";

}

else{

this._data=newValue;

this.grade="其他职位";

}

}

});

try{

salary.data=15400;

console.log(JSON.stringify(salary));

}catch(e){

// console.log(e.message)

}

//使用访问器属性的常见方式,即设置一个属性的值会导致其他属性发生变化

//只设置setter函数或者只设置getter函数在strict模式下会导致错误

//旧浏览器访问方法:

// 请注意,该方法是非标准的,不要尝试用它

var book={

_year:2004,

edition:1

}

book.__defineGetter__("year",function(){

return this._year;

});

book.__defineSetter__("year",function(newValue){

if(newValue>2004){

this._year=newValue;

this.edition+=newValue-2004;

}

});

book.year=2005;

// console.log(book.edition);

// 定义多个属性的Object.defineProperties()方法

相关文章

  • 数值属性和访问器属性

    'use strict' //方法1:创建一个实例,再给它赋属性和方法 var person =new Objec...

  • 数据属性与访问器属性——对象(一)

    (整理自网络) ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种。 数据属性一般用于存储数据数值,访问器...

  • JAVASCRIPT数据属性与访问器属性

    ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种。 数据属性一般用于存储数据数值,访问器属性对应的是se...

  • 理解对象之 —— 数据属性与访问器属性

    ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种。 数据属性一般用于存储数据数值,访问器属性对应的是se...

  • getter和setter 到底是个啥玩意

    js中一共有两种属性,一种数据属性,一种访问器属性 访问器属性不包函数值;包含一对getter和setter函数(...

  • 面向对象

    一、属性类型 数据属性 访问器属性 1、数据属性 2、访问器属性 例: 定义单个访问器属性 定义多个属性 二、创建...

  • vue双向数据绑定

    Vue双向数据绑定原理 1.属性访问器 ECMAScript中的属性分为两种:数据属性和访问器属性 1 数据属性数...

  • JavaScript面向对象

    属性类型 数据属性和访问器属性。 数据属性 [[Configurable]]:表示能否通过delete删除属性从而...

  • 数据属性和访问器属性

    访问器属性数据属性定义set在读取属性时调用的函数,默认为undefined。get在写入属性时调用的函数,默认为...

  • Java学习笔记 - 第008天

    每日要点 修改器和访问器 修改器 - 属性的setter方法 访问器 - 属性的getter方法 toString...

网友评论

    本文标题:数值属性和访问器属性

    本文链接:https://www.haomeiwen.com/subject/uuuxxftx.html