IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 面向对象--理解对象 -> 正文阅读

[JavaScript知识库]面向对象--理解对象

为回馈粉丝们的热情,给各位总结一份超详细地面向对象教程:

前言:

1.创建自定义对象最简单的案例

var person = new Object();
person.name = "lily";
person.age = 16;
person.job = "Software Engineer";
person.sayName = function(){
    alert(this.name);
};

2.字面量形式:

var person = {
    name:"lily",
    age:16,
    job:"Software Engineer",

    sayName:function(){
        alert(this.name);
    }
};

一、属性类型

ECMAScript中有两种属性:数据属性和访问器属性。
1.数据属性
(1)Configurable:能够通过detele删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值true。
(2)Enumerable:能否通过for-in循环返回属性,默认值true。
(3)Writable:能否修改属性的值,默认值true。
(4)Value:读取属性值,写入属性值的时候,把新值保存在这个位置,默认值undefined。

//Object.defineProperty()方法只能修改writable特性
var person = {};
Object.defineProperty(person,"name",{
    writable:false,//设置了只读
    value:"lily"
});
alert(person.name);//lily
person.name = "john";
alert(person.name);//lily

2.访问器属性
包含getter和setter函数,有4个特性:
(1)Configurable:能够通过detele删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为数据属性,默认值true。
(2)Enumerable:能否通过for-in循环返回属性,默认值true。
(3)Get:读取属性时调用的函数,默认值:undefined。
(4)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

二、定义多个属性
对象定义多个属性的可能性很大。定义了一个Object.defineProperties()方法,可以一次定义多个属性。

var book = {};
Object.defineProperties(book,{
  //2个数据属性
    _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()方法,可以取得给定属性的描述符。
接收2个参数:(1)属性所在的对象。(2)要读取其描述符的属性名称。
返回值是一个对象。

var book = {};
Object.defineProperties(book,{
    _year:{
        value:2004,
    },
    edition:{
        value:1
    },
    year:{
        get:function(){
            return this._year;
        },
        set:function(newValue){
           if(newValue > 2004){
               this._year = newValue;
               this.edition += newValue - 2004;
           } 
        }
    }
});
var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
alert(descriptor.value);//2004
alert(descriptor.configurable);//false
alert(typeof descriptor.get);//"undefined"

var descriptor = Object.getOwnPropertyDescriptor(book,"year");
alert(descriptor.value);//undefined
alert(descriptor.enumerable);//false
alert(typeof descriptor.get);//"function"

对于数据属性_year,value等于最初的值,configurable是false,而get等于undefined。对于访问器属性year,value等于undefined,enumerable是false,而get是一个指向getter函数的指针。
今天先整理到这里,稍后再续创建的7种模式~
晚安,各位

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:31:56  更:2021-11-30 15:33:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:47:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码