2019-05-05 20:31:31
针对JS高级程序设计这本书,主要是理解概念,大部分内容源自书内。写这个主要是当个书中的笔记加总结
创建对象的两个方法(暂时)
1 //第一种,通过创建一个Object类型的实例,然后为他添加属性和方法 2 var person = new Object() 3 person.name = 'laotie' 4 person.sayName = function(){ 5 alert(this.name) 6 } 7 //第二种简化版 8 var person = { 9 name: 'laotie', 10 sayName: { 11 alert(this.name) 12 } 13 }
JS不能访问的数据属性
Object.defineProperty()接收三个参数:属性所在的对象,属性的名字和一个描述符对象 描述符对象必须是上面那四个
var person = {} Object.defineProperty(person, 'name', {\ //我设置了,其中person的属性name,所以name这个属性他就动不了了 writable: false, value: 'laotie' }) alert(person.name) //'laotie' person.name = '666' alert(person.name) //'laotie'
如果用Object创建的属性一般configurable,enumerable,writable的默认值都是false,如果不用他创建的话就没有限制。
总之这个东西没什么太大实际用处,帮助理解吧
var book = { _year: 2004 edition: 1 } Object.defineProperty(book, 'year', { //这里放刚才的属性 get: function(){ return this._year }, set: function(newValue){ if(newValue > 2004){ this._year = newValue this.edition += newValue - 2004 } } }) book.year = 2005 alert(book.edition) //2
老方法不介绍了,是直接在对象后面调用__defineGetter__和__defineSetter__,参数里面第一个是属性,第二个穿进去个处理函数
ES5加了个牛逼的Object.defineProperties()方法
第一个参数里放要修改属性的对象 ,第二个加个代码块里面方参数
var book = {} Object.defineProperties(book,{ _year: { writable: true, value:2004 }, edition: { writable: true, value: 1 }, set:function(newValue){ if(newValue > 2004){ this._year = newValue this.edition += newValue - 2004 } } })
Object.getOwnPropertyDescriptor()
var descript = Object.getOwnPropertyDescriptor(book, '_year') alert(descript.value) //2004 alert(descript.configurable) //false
fucntion createPerson(name, age, job){ var o = new Object() o.name = name o.age = age o.job = job o.sayName = function(){ alert(this.name) } return o } var person1 = creatPerson('laotie', 26, 'meiyou')
没法解决你这个对象什么类型的,因为对象在里面创建的,很迷