美文网首页
面向对象-001

面向对象-001

作者: AuthorJim | 来源:发表于2017-02-28 09:52 被阅读0次

title: 面向对象编程01

对象:无序属性的集合,其属性可以包含基本值,对象,或者函数。

理解对象

创建自定义对象的首选方法为对象字面量形式:

var person = {
    name: 'benjamin',
    age: 22,
    job: 'Front End Engineer',
    sayName: funtion(){
        alert(this.name);
    }
};

属性类型

JS中有两种属性:数据属性和访问器属性。

数据属性

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

如果需要修改属性的默认特性,必须使用Object.defineProperty()方法。此方法接受三个参数:属性所在的对象,属性名和一个描述符(descriptor)对象。描述符对象的属性必须是:configurable、enumerable、writable和value。

var person = {};
Object.defineProperty(person,'name',{
    writable: false,
    value: 'benjamin'
});
alert(person.name)  //'benjamin'
person.name = 'llf';
alert(person.name)  //'benjamin'

无法提供赋值形式修改'name'的值。该规则对于configurable同样适用。而且一旦将属性定义为不可配置后,就无法再将它变回可配置了。

访问器属性

访问器属性不包含数据值;它包含一对getter和setter函数。在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责如何处理数据。

访问器属性具有以下四个特性:

由于访问器属性不可以直接定义,必须使用Object.defineProperty()来定义。

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

访问器属性通常用于设置一个属性的值会导致其他属性的变化

定义多个属性

利用Object.defineProperties()可以通过描述符一个定义多个属性。此方法接受两个对象参数:第一个对象为要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。

var book = {};
Object.defineProperties(book,{
    _year: {
        writable: true,
        value: 2004
    },
    edition: {
        writable: true,
        value: 1
    },
    year: {
        get: function () {
            return this._year;
        }.
        set: function (newValue) {
            if (newValue > 2004) {
                this._year = newValue;
                this.edition += newValue - 2004;
            }
        }
    }
})

读取属性特性

利用Object.getOwnPropertyDescriptor()方法可以去属性的描述符。该方法接受两个参数:属性所在的对象名以及要读取其描述符的属性的名称。返回值是一个对象,如果是访问器属性。该对象的属性就有configurable、enumerable、get、set;如果是数据属性。那就是configurable、enumerable、writable、value。

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

相关文章

  • 面向对象-001

    title: 面向对象编程01 对象:无序属性的集合,其属性可以包含基本值,对象,或者函数。 理解对象 创建自定义...

  • 001 面向过程 vs 面向对象

    定义 面向过程:一种以事件为中心的编程思想 面向对象:一种以“对象”为中心的编程思想 面向过程   编程的时候把解...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • 20-OOP类与对象

    面向对象 Object Oriented 学习面向对象:XXOO 面向对象的学习: 面向过程和面向对象的区别: 面...

  • JavaScript面向对象核心知识归纳

    面向对象 概念 面向对象就是使用对象。面向对象开发就是使用对象开发。 面向过程就是用过程的方式进行开发。面向对象是...

  • 面向对象(未完成)

    面向对象 标签(空格分隔): 面向对象 第一章:面向对象(上) 什么叫面向对象 面向过程、面向对象、两者区别 构造...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

网友评论

      本文标题:面向对象-001

      本文链接:https://www.haomeiwen.com/subject/iwfxgttx.html