JavaScript 面向对象的程序设计记录笔记

以下为JavaScript高级程序设计第六章面向对象的程序设计读书笔记记录。

对象存在两个属性: 数据属性/ 访问器属性。

  数据属性包括四个值: Configurable: 默认值为true, 表示能否通过delete删除属性重新定义;能否修改属性特性,或者能否吧属性修改为访问器属性。

            Enumable:  表示能否通过for in循环返回属性。默认值为true。

            writable: 表示能否修改属性,默认值为true。

            Value:包含这个属性的数据值。

  访问器属性包括四个值:Configurable: 默认值为true, 表示能否通过delete删除属性重新定义属性;能否修改属性特性,或能否修改为数据属性。

            Enumable: 表示能否通过for in循环返回属性, 默认值为true。

            Get: 在读取属性时调用的函数,默认值为undefined.

Set: 在写入属性时调用的函数,默认值为undefined。

其中涉及到Object.defineProperty()/Object.defineProperties()/Object.getOwnPropertyDescriptor()等方法。

  object.defineProperty(), 传入三个值,第一个为定义属性的对象,第二个为定义属性的对象属性,第三个为属性描述符。如下:

    var obj = {};

    Object.defineProperty(obj, ‘name‘, {value: ‘Tom‘});

  object.defineProperties(), 传入两个值,可定义多个属性特性,第一个为定义属性的对象,第二个为定义属性特性的属性健值对,如下:

    var obj = {};

    Object.defineProperties(obj, {

      _year: { value: 123}, // 属性添加‘_’前缀,表示该属性只能通过对象的访问器属性进行访问,即get()/set()方法。

      name: {value: ‘Tom‘},

      year: {

        get: function(){

          return this._year;

        }

      }

    });

  Object.getOwnPropertyDesciptor(), 表示获取某个属性的描述符(该数据属性或访问器属性),该方法传入两个参数,第一个表示属性所在的对象,第二个表示描述符的属性名称,返回值为一个对象。如下:

  引用上述定义的obj对象,调用Object.getOwnPropertyDescrptor().

  var descriptor = Object.getOwnPropertyDescriptor(obj, _year);

  console.log(descriptor.value); // 输出123

  console.log(descriptor.get);  // 输出undefined  

  var descriptor2 = Object.getOwnPropertyDescriptor(obj, year);  

  console.log(descriptor.value); // 输出undefined

  console.log(descriptor.get);  // 输出function  

    

时间: 2024-10-12 19:05:41

JavaScript 面向对象的程序设计记录笔记的相关文章

JavaScript 面向对象的程序设计记录笔记2(设计模式)

以下为JavaScript高级程序设计 第六章面向对象的程序设计6.2节 创建对象(设计模式部分)读书记录. 1)工厂模式: function createPerson(name, age, sex) { var o = new Obejct(); o.age = age; o.sex = sex; o.name = name; return o; } var person = createPerson('Tom', 12, 'male'); var person = createPerson(

JavaScript 面向对象的程序设计记录笔记4

组合使用构造函数模式和原型模式: function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.friends = ['Shelby', 'Court']; } Person.prototype = { connstructor: Person, sayName: function(){ return this.name; } } var person1 = new Person('

JavaScript 面向对象的程序设计记录笔记5

继承: 原型链继承 function SuperType() { this.propperty = true; } Supertype.prototype.getSuperValue = function() { return this.propperty; } function SubType() { this.subproperty = false; } // 继承了SubType SubType.prototype = new SuperType(); SubType.prototype.

JavaScript 面向对象的程序设计(一)之理解对象属性

首先,JavaScript 面向对象的程序设计,主要分三部分. 理解对象属性: 理解并创建对象: 理解继承. 本文主要从第一方面来阐述: 理解对象属性 首先我们来理解Javascript对象是什么?在Javascript中,万物皆对象.其中创建自定义对象的最简单的方式就是创建一个Object的实例,如下: ECMAScript中有两种属性:数据属性和访问器属性. 数据属性:其中数据属性有四个描述其行为的特性:Configurable: 表示能都通过delete删除属性从而重新定义属性.Enume

《Javascript面向对象精要》笔记

刚读过<Javascript面向对象精要>这本书,在现有的知识体系里面有一些新鲜的认识,记录一下. 原始类型和引用类型 Javascript存在两种类型:原始类型和引用类型.原始类型包括String.Number.Boolean.Null.Undefined,引用类型保存对象,其本质是对象所在内存位置的引用. 原始类型的赋值或者给函数传参,实际上都是传递原始类型值的拷贝: 引用类型则是引用的拷贝.修改其中一个引用的话,其他引用也会受到影响.如果对象中的某个属性也是对象,在对象拷贝时就会引入深拷

JavaScript面向对象编程指南——学习笔记1

第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对象的程序设计 1.5.1 对象(属性和方法的集合) 1.5.2 类 (相似对象的共同特征,如麻雀.老鹰都是鸟类) 1.5.3 封装 (将属性和方法集合起来,也有封闭作用域的概念,如封装一个播放器对象) 1.5.4 聚合 (将几个对象合并成一个对象) 1.5.5 继承 (一个实例对象继承父级对象的一些属性和方法) 1.5.6 多态 (一个对象调用其他对象的方法,call和apply) 1.6 OPP

Javascript面向对象的程序设计

面向对象的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象. 每个对象都是基于一个引用类型创建的,这个引用类型可以是之前的原生类型,也可以是开发人员定义的类型. 1.理解对象 ①属性类型:ECMAScript中有两种属性:数据属性和访问器属性. (1)数据属性:数据属性包含一个数据值的位置.在这个位置可以读取和写入值,数据户型有4个描述其行为的特性: 数据属性有4个描述其行为的特性. [[Configurable]]:表示能否通过delete删除属性从而重

《JavaScript面向对象编程指南》读书笔记②

概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的知识点,以后再看也可当做拾遗之用! 内容 1.枚举属性用for-in循环显示. 2.当我们对对象的prorotype属性进行完全重写时,有可能会对对象constructor属性产生一定的负面影响. 3.uber--子对象访问父对象的方式Triangle.uber = TwoDShape.prototype 4

JavaScript高级程序设计学习笔记--面向对象程序设计

工厂模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用 工厂模式的一种变体. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var