js学习日记-对象字面量

对象字面量语法

var person={
    name:‘小王‘,
    age:18,
    _pri:233
} 

1.采用对象字面量方法创建的对象,不能采用var wang=new person()这样的方式来调用,要访问对象中的方法,直接使用person.xxx的形式

2.最后一个成员结尾不要用逗号,不然在某些浏览器中会抛出错误

对象成员配置

对象申明后,会默认为内部的每个成员(属性或方法)生成一些隐藏属性,这些隐藏属性是可以读取和可配置的:

Object.getOwnPropertyDescriptor()或getOwnPropertyDescriptor()-读取成员的隐藏属性

Object.definePropertype或Object.defineProperties----设置成员的隐藏属性

相应的隐藏信息如下:

configurable-是否可以删除某个成员,默认为true,需要注意的是,如果该属性如果定义为false,后续又定义为true的话会报错

     Object.defineProperty(person,‘name‘,{
       configurable:false
     })
     Object.defineProperty(person,‘name‘,{
      configurable:true
     })

writable-成员是否可写,默认为true

     Object.defineProperty(person,‘name‘,{
       writable:false
     })
     person.name=‘小李‘; //属性不可写,严格模式下会报错
     console.log(person.name); //输出小王,说明上面一句无效

enumerable-成员是否可被枚举,默认为true,该属性主要是用来防范Object.keys()和for in的,也就是说该属性设置对于Object.getOwnPropertyNames()方法是无效的

get与set-读写成员时调用的函数,默认为undefined

在最开始处的对象定义中,我们创建了一个_pri成员,表示这个成员应在内部读取,下划线只是一个标记符,并不能限制该成员只能在对象内部访问。接下来我们来封装一个属性读写器对_pri成员进行读取,读写器名称随意取,这里叫pri只是为了可读性

     Object.defineProperty(person,‘pri‘,{
       get:function(){
         //做一些其它操作
         console.log(‘准备获取_pri的值‘)
         return _pri;
       },
       set:function(newValue){
         _pri =newValue
       }
     })
     person.pri=‘456‘;
     console.log(person.pri);

如果只有get则表示属性值是只读的,只有set表示只能写。

属性读写器最常用的场景就是在读取或写入属性前可以附带的做一些操作,达到更好的封装性

高级特性

1.我想要继承一个对象字面量对象,该怎么办?

Object.create(person)可产生一个具有继承特性的新对象,但是需要注意的是,父类的引用成员是和子类共享的,当子类修改引用成员时,父类的该成员也会同步发生变化

     var person={
       name:‘小王‘,
       age:18,
       _pri:233,
       gf:[‘豆得儿‘,‘张G‘,‘TFb‘]
     }
     var child=Object.create(person);
     child.gf.splice(0,1); //跟豆得儿分手了
     console.log(person.gf.length) //父类的gf也变成2了,父子共享女友,尼玛,太乱了

  看到了吗,所以使用此种继承法时一定要小心,能不用最好不用

2.我不想让别人在我的对象上添加成员该怎么办?

Object.preventExtensions(),该方法用于阻止向对象添加成员,使用Object.isExtensible()判断对象是否可添加成员

    Object.preventExtensions(person);
    //添加成员无效,非严格模式下什么都不会发生,严格模式下会报错
    person.bankAccount=‘中国农业银行‘
    //依然可以删除成员,证明了preventExtensions方法只能阻止添加方法
    delete person.age;
    console.log(person.age) //undefined,表明删除成功了

3.我不想让别人添加、删除成员

Object.seal()用来阻止添加或删除成员,判断对象是否是密封的可采用Object.isSealed()

4.我不想让别人添加、删除成员,也不想让别人对里面的成员进行赋值操作

使用Object.freeze()方法后,person.age="xxx" 这种赋值就无效了,但是写入属性(上面set定义的)依然是有效的

原文地址:https://www.cnblogs.com/94pm/p/9179231.html

时间: 2024-10-03 14:41:38

js学习日记-对象字面量的相关文章

js对象字面量属性间相互访问的问题 和 这个问题与执行环境的关系

对象字面量属性间无法相互访问的问题: 我曾经在定义一个对象时, 并出于复用性的考虑试图复用某些属性: // test 1 var person = { firstName : "Bill", lastName : "Gates", fullName : firstName + " " + lastName // 这里报错 } alert(person.firstName); alert(person.lastName); alert(person

js对象字面量

js对象字面量 对象字面量的输出方式以及定义好处 1.对象字面量的输出方式有两种:传统的‘.’,以及数组方式,只不过用数组方式输出时,方括号里面要用引号括起来,如 var box = { name:’abc’; age:28 }; alert(box[‘name’]); 给对象定义方法, A:如果用传统定义对象的方式,就需要先定义方法,然后再把这个方法名赋值给对象的一个属性,如果要调用这个方法不加括号,就是返回方法代码:如果要调用这个方法该对象属性后面加上括号,就得到方法的返回值 functio

js创建object实例的方式有两种(new操作符和对象字面量)

读javascript高级程序设计(第三版)有感: 创建object实例有两种方式,第一种用new操作符后跟object构造函数,如下所示: var bb= new Object(); bb.name = "zoumm"; bb.job = "web开发"; 第二种是使用对象字面量表示法,目的在于简化创建大量属性的对象过程.如下所示: var bb = { name:"zoumm", age:12 } 最后一个属性后面添加逗号,会在ie7及更早版

js 对象字面量

对象字面量的输出方式以及定义好处 1.对象字面量的输出方式有两种:传统的'.' 例如:box.name 以及数组方式,只不过用数组方式输出时,方括号里面要用引号括起来 例如:box['name'] var box = { name:'abc'; age:28 }; alert(box['name']); var literal = { add: function(){ alert("add"); }, del: function(){ alert("delete")

ES6新语法之---对象字面量扩展、模板字符串(5)

这节课学习ES6中对象字面量扩展和新增模板字符串 第一部分:对象字面量扩展 1.简洁写法 ES6对于对象字面量属性提供了简写方式. 1.1:属性简写 //传统写法 var x = 2, y = 3, o = { x: x, y: y }; //ES6简洁写法 var x = 2, y = 3, o = { x, //属性名和赋值变量名相同时,可简写 y }; 1.2:方法简写 //传统写法 var o = { x: function() { //... }, y: function() { //

JavaScript对象字面量

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script type="text/javascript

对象字面量表示法

今天看书看到了一个没见过的词儿:对象字面量表示法,看过内容之后,发现这货就是Json,但又不仅仅是Json,于是好好的问了一番度娘,原来Json只是一个数组和对象字面量表示法的组合. 先说下数组的字面量表示法 数组其实也是对象,构造函数的方式创建数组方式如下: var myArr = new Array("妹妹","表妹","萝莉"); 字面量表示法(不知道这词儿之前,我一直这样写,推荐此写法): var myArr = ["妹妹&qu

Javascript——对象字面量常用写法以及规则

对象字面量 对象字面值是封闭在花括号对({})中的一个对象的零个或多个"属性名-值"对的(元素)列表.你不能在一条语句的开头就使用对象字面值,这将导致错误或产生超出预料的行为, 因为此时左花括号({)会被认为是一个语句块的起始符号. 以下是一个对象字面值的例子.对象car的第一个元素(译注:即一个属性/值对)定义了属性myCar:第二个元素,属性getCar,引用了一个函数(即CarTypes("Honda")):第三个元素,属性special,使用了一个已有的变量

关于对象字面量花括号{} key的类型

原来对{}方式建立的实例化后的对象的key,理解不清,只知道,数组加不加“”,反正都是字符,现在要理解下,到底怎么回事?返回结果是 var a={}; a[1]="a"; a["1"]=1; a["'1'"]="aa"; a["b"]=2; a[{1:2}]=3; console.log(a); for(var i in a){ console.log(i); console.log(typeof i);