JavaScript-面向对象编程

JavaScript-面向对象编程

理解对象

对象是一组没有特定顺序的值。对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值。每个对象都是基于一个引用类型创建的。

var person ={
    // 属性名:属性值,
    name:"Jinag Liangji",
    age:25,
    job:"Software Engineer",
    sayName: function (){
        print("hello,my name is "+ this.name+"!")
    }
}

属性类型

数据属性

数据属性包含一个数据值的位置,在这个位置可以读取和写入值。数据属性有4个描述其行为的特性:

  1. [[Configurable]]:表示能否通过delete删除属性从而重新定义属性、能否修改属性的特性、能否把属性改成访问器属性
  2. [[Enumerable]]:表示能否通过for-in循环返回属性
  3. [[Writable]]:表示能否修改属性的值
  4. [[Value]]:包含这个属性的数据值
    比如name:“Jiang Liangji”:即name这个属性的[[Value]]的特性被设置为"Jinag Liangji",对这个值的任何修改都反映在name的位置
访问器属性

访问器属性不包含数据值,它们是一对getter和setter函数。
在读书访问器属性是,调用getter函数,这个函数负责返回有效的值;
在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据。
有4个描述其行为的特性:

  1. [[Configurable]]:表示能否通过delete删除属性从而重新定义属性、能否修改属性的特性、能否把属性改成为数据属性
  2. [[Enumerable]]:表示能否通过for-in循环返回属性
  3. [[get]]:在读取属性时调用的函数,默认为undefined
  4. [[set]]:在写入属性时调用的函数,默认为undefined
var book = {
    _year:2019,  //year前面的下划线_表示只能通过对象方法访问的属性
    edition: 1
};
Object.defineProperty(book,'year',{
    get:function () {
        return this._year;
    },
    set:function (newValue) {
        if (newValue > 2019){
            this._year = newValue;
            this.edition += newValue-2019
        }
    }
})
book.year= 2021
console.log(book.edition) //输出结果为3
创建对象的方法
//字面量语法
var obj1 = {
    name:"对象一",
    age:31,
    speak: function () {
        console.log('hi')
    }

}

//创建对象,再设置属性
var obj3 = new Object() //"Object"构造器创建了一个针对特殊值的对象包装,只不过这里没有传值给它,所以它将会返回一个空对象
//设置属性
obj3.name="张三"
obj3.age=23
obj3.sayName = function () {
    console.log(this.name)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值