javascript 对象的创建与继承

2019-05-05 20:31:31

针对JS高级程序设计这本书,主要是理解概念,大部分内容源自书内。写这个主要是当个书中的笔记加总结

6.1理解对象

创建对象的两个方法(暂时)

 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 }

 

6.1.1 类型属性

1.数据属性

JS不能访问的数据属性

  • Configurable 能不能用delete删除 默认true
  • Enumerable 能否通过for-in循环返回属性 默认true
  • Writable 能否修改属性 默认true
  • Value 就是这个属性的属性值 默认undefined

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,如果不用他创建的话就没有限制。

总之这个东西没什么太大实际用处,帮助理解吧

2.访问器属性
  • Configurable, enumerable 跟上面的差不多
  • Get 在读取属性时调用的函数
  • Set 在写入时调用的属性 get,set默认都为undefined
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__,参数里面第一个是属性,第二个穿进去个处理函数

6.1.2定义多个属性

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 }
    }
})

 

6.1.3读取属性的特性

Object.getOwnPropertyDescriptor()

var descript = Object.getOwnPropertyDescriptor(book, '_year')
alert(descript.value) //2004 alert(descript.configurable) //false

 

6.2创建对象

6.2.1工厂模式

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')

 

没法解决你这个对象什么类型的,因为对象在里面创建的,很迷

  • Copyright© 2015-2021 长亭外链网版权所有
  • QQ客服

    需要添加好友

    扫码访问本站