美文网首页
面向对象的程序设计 <step 1 ~ 对象的属性>

面向对象的程序设计 <step 1 ~ 对象的属性>

作者: 苏日俪格 | 来源:发表于2018-07-23 10:57 被阅读18次

☞☞ 个人主页欢迎访问 ☜☜


大家好,我是苏日俪格,下面我把我对面向对象的理解跟大家分享一下,本文是面向对象的第一部分,本文纯属个人理解,有哪里不对的地方请在评论区指出,大家一起学习共同进步。

正所谓万物皆对象,从简单的整数到复杂的火箭都是对象,那么对象身上的属性和方法就可以看作是事物的特征和行为,就比如说色色的隔壁老王去开车,隔壁老王就是对象,色色的就是他身上的属性,而开车就是他的方法;下面来演示一个创建自定义对象最简明的方法:

let obj = new Object(); // 创建一个obj对象
obj.name = '苏日俪格';  // 给obj对象添加它的属性
obj.show = function(){  // 给obj对象添加他的方法
    console.log(this.name); // 苏日俪格
};
obj.show();

上面的例子用对象字面量语法可以写成这样的:

let obj = {
    name: '苏日俪格',
    show: function(){
        console.log(this.name);  // 苏日俪格
    }
};
obj.show();

下面我们说点深奥的东西,听不懂也没啥关系,这是我在面试的时候,面试官问我的问题,后来从书上网上多多少少看了点;ECMAScript中有两种属性:数据属性和访问器属性,这两个属性是我们JavaScript中底层的东西,也可以这么理解,对象的身上有属性,而数据属性和访问器属性就是用来描述属性行为的属性;

  • 数据属性
    数据属性是属性(property)的内部值,它包含一个数据值的位置,而在这个位置可以读取和写入值;数据属性有4个描述其行为的特征:
    1、[[Configurable]]:表示能否通过delete将属性删除,能否把属性修改为访问器属性, 默认为true。当把属性Configurable设置为false后,该属性不能通过delete删除,并且也无法再将该属性的Configurable设置回true
    2、[[Enumerable]]:表示属性可否被枚举(即是否可以通过for...in循环返回),默认true
    3、[[Writable]]:能否修改属性值,默认为true
    4、[[Value]]:包含这个属性的数据值,默认为undefined
    以上面刚才的那个例子为例子,obj对象上有一个name属性,它的值是‘苏日俪格’,也就是[[Value]]的值就是‘苏日俪格’,对这个值做任何修改都可以反映在这个位置。

使用ES5的Object.defineProperty()方法可以修改属性默认的特性/描述符,接受三个参数:属性所在对象、属性的名字和描述符对象(谨记:描述符对象里面必须只能写那四种描述符),exp:

let obj = {};
Object.defineProperty(obj, 'name', {
    writable: false,
    value: '苏日俪格'
});
console.log(obj.name);  // 苏日俪格
obj.name = 'yufy';
console.log(obj.name);  // 苏日俪格

例子中writable特征的值为false就是不能修改,之后再怎么修改都是无效的。

既然都可以修改了,肯定也是可以读取的,使用ES5的Object.getOwnPropertyDescriptor()方法可以读取属性的特征/描述符,他接受两个参数:属性所在对象和要读取描述符的属性名称,exp:

let obj = {
    name: '苏日俪格'
};
let gopd = Object.getOwnPropertyDescriptor(obj, 'name');
console.log(gopd);  // Object {value: "苏日俪格", writable: true, enumerable: true, configurable: true}
  • 访问器属性
    访问器属性不包含数据值;但他有一对getter和setter函数(不过这两个函数可有可无),在读取访问器属性时,会调用getter函数,返回一个有效值;在写入访问器属性时,会调用setter函数并传入新的值,该函数负责如何处理数据。访问器属性也具有四种特征/描述符对象:
    1、[[Configurable]]:能否通过delete删除属性重新定义,或者能否修改为数据数据属性,默认为true
    2、[[Enumerable]]:表示属性可否被枚举(即是否可以通过for in循环返回),默认true
    3、[[Get]]:读取属性时调用的函数, 默认为undefined
    4、[[Set]]:写入属性时调用的函数, 默认是undefined

至于访问器属性的用法和数据属性的类似,这里就不在强调了,接下来切入主题,玩面向对象先要搞定如何来创建对象

本文的所有内容均是一字一句敲上去的,希望大家阅读完本文可以有所收获,因为能力有限,掌握的知识也是不够全面,欢迎大家提出来一起分享!谢谢O(∩_∩)O~

欢迎访问我的GitHub,喜欢的可以star,项目随意fork,支持转载但要下标注,同时恭候:个人博客

等一下( •́ .̫ •̀ ),我还有最后一句话:
我爱你,
我喝过最烈的酒 ,
是你在骄阳下的不回头,
吃过最苦涩的春药 ,
是你和我说 ,
可绝不在你启程时 ,
要一世白头 ,
再见...

相关文章

  • 面向对象的程序设计 <step 1 ~ 对象的属性>

    ☞☞ 个人主页欢迎访问 ☜☜ 大家好,我是苏日俪格,下面我把我对面向对象的理解跟大家分享一下,本文是面向对象的第一...

  • 面向对象的程序设计 <step 2 ~ 创建对象>

    大家好,我是苏日俪格,本文是面向对象的第二部分,纯属个人理解,有哪里不对的地方请在评论区指出,大家一起学习共同进步...

  • JavaScript高级程序设计笔记6

    面向对象的程序设计 理解对象 (1)属性类型 (2)定义多个属性 (3)读取属性的特性 创建对象 (1)工厂模式 ...

  • 面向对象的程序设计 <step 4 ~ 继承>

    大家好,我是苏日俪格,本文是面向对象的第四部分,纯属个人理解,有哪里不对的地方请在评论区指出,大家一起学习共同进步...

  • python的特性

    Python使用C语言开发 1.面向对象的特性 面向对象的程序设计抽象出对象的行为和属性,把行为和属性分离开,但是...

  • javaScript高级程序设计读书笔记(六)

    面向对象的程序设计,面向对象的语言有类的概念,通过类创造多个具有相同的属性和方法的对象。 对象 属性类型 数据属性...

  • JavaScript 高级程序设计(二)

    P4 面向对象的程序设计 4.1 理解对象 数据属性 Configurable:能否通过 delete 删除属性,...

  • JS对象_原型

    问题1: OOP 指什么?有哪些特性 OOP:是面向对象程序设计。以前写代码都是面向过程。面向对象就是把公有的属性...

  • 第四章 对象与类

    1 面向对象程序设计概述 面向对象程序设计(简称OOP)是当今主流的程序设计范型 Java是完全面向对象的,必须熟...

  • 面向对象的程序设计——理解对象

    面向对象的程序设计 ECMA-262 把对象定义为:无须属性的集合,其属性可以包含基本值、对象或者函数。 理解对象...

网友评论

      本文标题:面向对象的程序设计 <step 1 ~ 对象的属性>

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