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

2018-07-23  本文已影响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中底层的东西,也可以这么理解,对象的身上有属性,而数据属性和访问器属性就是用来描述属性行为的属性;

使用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}

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

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

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

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

猜你喜欢

热点阅读