面向对象的程序设计-1-理解对象

1.简单的字面量对象

var person = {
    name: ‘miaowwwww‘,
    age: 22,
    sayName: function() {
        console.log(this.name);
    }
};

 2.对象的属性类型

  2.1 对象的属性分为两类:数据属性访问器属性(getter/setter)

    A. 数据属性(name, age, sayName),含有4个描述其行为的特性

    value: ‘xxx‘,
    writable: true,        // 是否可修改value
    configurable: false,    // 是否可使用delete,删除属性
    enumberable: false        // 是否可遍历 (for-in 中)

    es5 提供接口 Object.defineProperty(obj, prop, descriptor) 修改对象的数据属性的描述符

          Object.getOwnPropertyDescriptor(obj, prop) 获取该属性的描述符对象

//注意:若使用api,writable,configurable,enumberable默认为false
Object.defineProperty(person, ‘name‘, {
    value: ‘xxx‘,
    writable: true,        // 是否可修改value
    configurable: false,    // 是否可使用delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性
    enumberable: false        // 是否可遍历 (for-in 中)
})

//注意:属性的value是一个函数,同样适用
var personDescriptor = Object.getOwnPropertyDescriptor(person, ‘sayName‘);
console.log(‘一个方法的描述‘,personDescriptor);

      注意:writable,enumberable可以多次调用接口修改,但是一旦修改configurable: false; 则产生限制,以后只能修改writable了

    B.访问器属性:访问器属性不包含数据值,但是多了一对getter和setter函数(并不是一定要有,可不定义)

    configurable: false,
    enumberable: false,
    [[get]]:  读取属性时调用的函数。默认undefined
    [[set]]:  写入属性时调用的函数。默认undefined

    setter函数中可以修改对象的多个属性值,典型的一对多,是setter的一个应用

var book = {
    _year: 2015,
    name: ‘book1‘
}
Object.defineProperty(book, year, {
    configurable: false,
    enumberable: false,
    get: function(){
        return this._year;
    },
    set: function(value) {
        this._year = value;
        this.name = ‘book-‘ + value;
    }
})
var descriptor = Object.getOwnPropertyDescriptor(book, ‘name‘);
console.log(descriptor)
console.log(book._year)

    注意:因为setter和getter并不是必须的,但是若忽略某一个将会发生什么事呢?当然是不能写入,或不能读取咯

 3. 一次性定义多个属性,并设置描述符

  es5:有一个方法 Object.defineProperties(obj, descriptors)

var book_13 = {};

Object.defineProperties(book_13, {
    _year: {    // 数据属性
        value: 2015,
        writable: true
    },
    name: {    // 数据属性
        value: ‘book‘,
        writable: true
    },
    year: {    // 访问器属性
        set: function(value) {},
        get: function() {}
    }
})

 4. 获取属性的特性描述符

  不管是数据属性还是访问器属性都可以通过: Object.getOwnPropertyDescriptor( obj, prop) 获取

var descriptor1 = Object.getOwnPropertyDescriptor(book_13, ‘name‘);
var descriptor2 = Object.getOwnPropertyDescriptor(book_13, ‘year‘);
console.log(descriptor1)
console.log(descriptor2)

时间: 2024-10-05 16:11:12

面向对象的程序设计-1-理解对象的相关文章

第六章-面向对象的程序设计(理解对象)

ESMA把对象定义为:"无序属性的集合,其属性可以包含基本值,对象和函数".严格的讲,这相当于说对象是一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每一个名字都映射到一个值. 1.理解对象 创建对象有对象字面量的方法,这种方法比较常用,也是比较推荐的. 1 var person ={ 2 name:'xu', 3 age:27, 4 sayName:function(){ 5 alert(this.name); 6 } 7 }; 还有创建对象的实例的方法: 2.属性的类型

读书笔记之面向对象的程序设计-1理解对象

ECMA-262把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数." 创建自定义对象的最简单方式就是创建一个Object的实例 eg:先创建一个名为person的对象,并为他添加了三个属性和一个方法. 1 var person = new Object(); 2 person.name = "Nicholas"; 3 person.age = 29; 4 person.job = "Software Engineer"; 5 p

《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

一.理解对象 ECMAScript中有两种属性:数据属性和访问器属性. 二.创建对象 1. 工厂模式 使用简单的函数创建对象,为对象添加属性和方法,然后返回对象.这种方法后来被构造函数模式所取代. 2. 构造函数模式 可以创建自定义引用类型,可以像创建内置对象实例一样使用new操作符.但是它的每个成员都无法得到复用,包括函数. 但是这样说好像也不准确——如果是通过一个指针指向构造函数外部的函数的话,应该算是复用? 1 function Person(name,age){ 2 this.name

JS面向对象篇一、理解对象及属性特性(属性描述符)

本文内容 1.理解对象; 2.ECMAScript有两种属性类型:数据属性和访问器属性(getter和setter函数); 3.数据属性的属性特性:[[Configurable]].[[Enumerable]].[[Writable]].[[value]]; 4.访问器属性的属性特性:[[Configurable]].[[Enumerable]].[[get]].[[set]]; 5.Object.defineProperty().Object.defineProperties().Object

面向对象学习篇[1]-理解对象

对象即多个属性和方法的一个集合体 属性类型 1 数据属性:数据属性包含一个数据值的位置,在这个位置可以读取和写入值.数据属性有4个描述其行为的特性a) [[Configurable]] 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,这个特性的默认值为trueb) [[Enumerable]] 表示能否通过 for-in 循环返回属性,这个特性的默认值为truec) [[Writable]] 表示能否修改属性的值,这个特性的默认值为trued

C++面向对象程序设计之类和对象的特性

类和对象的属性 注意:本文为书籍摘要版,适合有一定程序基础的人阅读. 2.1 面向对象程序设计方法概述 2.1.1 什么是面向对象的程序设计 1.对象 客观世界中的任何一个事物都可以看成一个对象. 如果我们把一个班级作为一个对象时有两个要素:一个是班级的静态特征,如班级学生的身高体重(可认为不变)等不变的特征,我们称为“属性”(即数据):二是班级的动态特征,如学生吃饭,上课,睡觉等,我们称为“行为”.如果想要在外部控制班级学生的动作的话,可以从外界给班级发一个信号,比如打铃就是告诉学生该上课了,

JavaScript 面向对象的程序设计(一)之理解对象属性

首先,JavaScript 面向对象的程序设计,主要分三部分. 理解对象属性: 理解并创建对象: 理解继承. 本文主要从第一方面来阐述: 理解对象属性 首先我们来理解Javascript对象是什么?在Javascript中,万物皆对象.其中创建自定义对象的最简单的方式就是创建一个Object的实例,如下: ECMAScript中有两种属性:数据属性和访问器属性. 数据属性:其中数据属性有四个描述其行为的特性:Configurable: 表示能都通过delete删除属性从而重新定义属性.Enume

第六章 面向对象的程序设计 (1 理解对象)

面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象. ECMA-262 把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正因为这样,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 每个对象都是基于一个引用类型创建的. 6

面向对象的程序设计-理解对象

理解对象 创建自定义对象的最简单方式就是创建一个Object的实例,然后再为它添加属性和方法 1 var person = new Object(); 2 person.name = "Nicholas"; 3 person.age = 29; 4 person.job = "SoftWare Engineer"; 5 person.sayName = function(){ 6 alert(this.name); 7 }; 创建对象的首选模式是对象字面量方式 1