Object.defineProperty(对象,"属性名",{
enumerable:false,
value:属性值
})
//批量设置
Object.defineProperties(对象,{
属性1:{
enumerable:false,
value:属性值
},
属性2:{
enumerable:false,
value:属性值
}
})
不考虑[]用作数组或集合下标使用的情况,单针对某个对象,这两种写法本质是一样的。但是第2种写法可以使用变量作为属性名,在实际使用过程中非常灵活,比如可以写出很通用的代码,而不用考虑具体对象的结构。这是由JavaScript的语法导致的,JavaScript并不能很好的解析css那样的书写格式。首先我们先回答另一个问题,JavaScript和css中属性名称有哪些差异?主要有两个:
1、 JavaScript使用驼峰命名法,而css不是。
2、 JavaScript的属性值用字符串表示,而css不是。
而导致这两个原因的就是JavaScript的语法。
1、 在css中,属性名中的单词之间是用横杠隔开,如font-weight, background-color。但在JavaScript中,横杠可能被认为是减号,所以采用驼峰命名法,单词之间不用横杠,如font-weight在JavaScript中应该写成fontWeight而background-color写成backgroundColor。
2、 在JavaScript中,属性值都写在双引号中,即要用字符串来给JavaScript相关属性赋值,同样当属性值有单位时,我们需要将单位也写在字符串中。示例:
myElement.style.fontWeight = “bold”
myElement.style.width = “230px”
而在css中直接写成:
width: 230px
font-weight:bold
其中属性值230px在JavaScript中可能会被认为是一个不合法的变量,因为它以数字开头,而bold也会被认为是一个变量,而不是表示字体的一种格式。所以JavaScript的属性值用字符串表示。
另外,秒秒学在《使用JavaScript美化界面》一章中详细说明了JavaScript是如何动态的改变样式的,你可以去看下。