美文网首页IT@程序员猿媛让前端飞程序员
JavaScript的基础知识——面向对象

JavaScript的基础知识——面向对象

作者: 子瑜说IT | 来源:发表于2019-04-01 20:01 被阅读58次

一、定义

无序属性的集合(散列表),其属性可以包含基本值,对象或函数;

每个对象都是基于一个引用类型创建的,这个引用类型可以是原生类型,也可以是自定义类型。

二、创建对象

创建一个Object实例

image

对象字面量

image

其中name和age是person的属性,sayName是person的方法。

三、属性类型

只有内部才用的特性,在JS中不能直接访问它们,为了表示特性是内部值,把它们放到了[[]]中;

ECMAScript中有以下两种属性:数据属性和访问器属性。

image

数据属性

其中,person.name的[Configurable]]、[[Enumerable]]、[[Writable]]都为true,[[Value]]为Memory。

修改数据属性:Object.defineProperty(对象obj, [属性名称], 描述符对象)

其中,描述符对象的属性必须是configurable、enumerable、writable、value之内的一到四个。

image

在调用Object.defineProperty时,如果不指定,configurable、enumerable、writable的值都默认为false;

在把configurable设为false之前,可以多次调用Object.defineProperty()修改同一个属性。之后修改除writable之外的其他特性,都会导致错误;

尝试修改writable:

image

尝试修改configurable:

image

configurable设为false,即表示不能从对象中删除属性;

如果这个对象调用delete,非严格模式下会被忽略,严格模式下则会抛错。

writable设为false,即表示该属性不可写;

非严格模式下会被忽略,严格模式下则会抛错。

image

访问器属性

访问器属性包含getter和setter函数(这两个函数都不是必需的),其中setter用来写值,getter用来读值。

设置一个属性的值会导致其他属性的变化,如下例year的变化导致_year 和age的变化:

image

不一定非要指定getter和setter;

只指定getter意味着属性只能读不能写;

尝试写入,在非严格模式下会被忽略,严格模式下则会抛错。

只指定setter意味着属性只能读不能读;

尝试读取,在非严格模式下会返回undefined,严格模式下则会抛错。

在该方法之前,要创建访问器属性一般要使用两个非标准的方法:defineGetter() 和 defineSetter()

image

不支持Object.defineProperty()的浏览器不能修改[Configurable]]和[[Enumerable]]

四、定义多个属性

Object.defineProperties(对象obj,对象 其属性为obj要添加和修改的属性)

五、读取属性的特性

Object.getOwnPropertyDescriptor(对象,属性)

参考

《JavaScript高级程序设计》

image

六、结语

本文主要介绍了对象属性的各种特性。其主要包括数据属性的[[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]]和访问器属性的[[Configurable]]、[[Enumerable]]、[[Get]]、[[Set]]。

自己整理了一份2019最全面前端学习资料,从最基础的HTML+CSS+JS到移动端HTML5到各种框架都有整理,送给每一位前端小伙伴,这里是小白聚集地,欢迎初学和进阶中的小伙伴

如有问题,欢迎指正。

image

相关文章

  • JavaScript之 new 命令

    JavaScript 面向对象编程的基础知识篇 1 。 1. 概述 面向对象编程(Object Oriented ...

  • JavaScript之 this 关键字

    JavaScript 面向对象编程的基础知识篇 2 。 1. 概述 在上篇文章 JavaScript之new命令 ...

  • JavaScript设计模式与开发实践

    第一部分 基础知识 第一章 面向对象的Javascript JavaScript 通过原型委托的方式来实现对象与对...

  • JavaScript学习

    javascript面向对象 初学javascript,感觉javascript的面向对象编程还是很有意思的,在此...

  • javascript的面向对象

    javascript面向对象 初学javascript,感觉javascript的面向对象编程还是很有意思的,在此...

  • ajax

    1. 面向对象 javascript 具有面向过程,面向对象,函数式编程的特点 javascript 重要 原型/...

  • 构造函数与 new 命令

    JavaScript 语言具有很强的面向对象编程能力,本章介绍 JavaScript 如何进行面向对象编程。 对象...

  • JavaScript面向对象学习笔记

    @(JS技巧)[面向对象] JavaScript面向对象学习笔记 封装 Javascript是一种基于对象(obj...

  • JavaScript的基础知识——面向对象

    一、定义 无序属性的集合(散列表),其属性可以包含基本值,对象或函数; 每个对象都是基于一个引用类型创建的,这个引...

  • js高级

    学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...

网友评论

    本文标题:JavaScript的基础知识——面向对象

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