当前标签 / 面向对象 / 总共5篇

JavaScript 高级程序设计(第3版)学习笔记

笔记2:面向对象部分

这是阅读《JavaScript 高级程序设计》书籍的学习笔记,整理和归纳,方便自己今后复习和查阅,这里总结的基本上都是一些比较特殊的知识点,和 Java 等其他高级语言重复的地方不在归纳范围内。建议先阅读第一部分 非面向对象部分。此部分主要是理解 JavaScript 中的面向对象的实现思路以及如何实现继承。

理解对象

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

数据属性

数据属性有 4 个描述其行为的特征。

[[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true.

[[Enumerable]]:表示能否通过 for-in 循环返回属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true.

[[Writable]]:表示能否修改属性的值。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true.

[[Value]]:包含这个属性的数据值。读取属性值的时候,从这个位置读;写入属性值的时候,把新值保存在这个位置。这个特性的默认值为 undefined.

1
2
3
var person = {
    name : "XiaoMing"
}

阅读更多

JavaScript 面向对象

本书籍是针对 Java 开发人员提供的入门 JavaScript 面向对象,本系列处于未完结状态,还在持续更新中。

作者在写作和整理过程中花费了大量时间和精力,另外服务器费用也是一笔不小的开支,如果你觉得我的文章和书籍对你有所帮助,可以请我喝杯咖啡或者农夫山泉:

如果在阅读过程中有任何疑问,可以去作者博客对应页面留言, 你也可以从我的体系树中找到对应文章。

阅读更多

JavaScript面向对象(3)

全局对象

我们知道在对象方法内部可以使用this来表示对象本身。

1
2
3
4
5
6
7
8
9
var hero = {
    name:'Rafaelo',
    sayName:function(){
        return this.name;
    }
}

>>> hero.sayName();
>>> "Rafaelo"

接下来我们通过构造器函数来创建对象

1
2
3
4
5
6
7
function Hero(){
    this.occupation = 'Ninja';
}

>>> var hero = new Hero();
>>> hero.occupation;
>>> "Ninja"

我们可以看出构造器的函数来创建对象有两个比较好的特点:

  1. 可以在创建对象的时候传参数。
  2. 在使用的时候才真正创建和执行。

阅读更多

JavaScript面向对象(2)

上一篇对继承进行了大量说明,回到我们的问题上,剩下的几个问题我们接下来看看

  1. 在JavaScript中,有接口吗?
  2. 在JavaScript中,如何使用函数这种特殊的对象?
  3. 在JavaScript中,闭包是什么?
  4. 在JavaScript中,有哪些奇技淫巧是Java所没有的?

JavaScript接口

在经典的 Java 面向对象语言中,可以用关键字 interface 来定义接口,用 implement 来实现接口,而 JavaScript 虽然也是面向对象语言,但是它并没有内置这些,不过由于 JavaScript 的灵活性,我们可以通过模拟来实现,方法是使用一个辅助类和辅助函数来协助完成这一过程。

阅读更多

JavaScript面向对象(1)

Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。那么,如果我们要把"属性”(property)和"方法”(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢?

作为多年使用Java的我,首先开始思考如下问题:

  1. 在JavaScript中,类如何定义,如何创建对象?
  2. 在JavaScript中,基本类型有对应的对象形式吗?
  3. 在JavaScript中,数组和函数是对象吗?
  4. 在JavaScript中,有继承和接口吗?
  5. 在JavaScript中,如何使用函数这种特殊的对象?
  6. 在JavaScript中,闭包是什么?
  7. 在JavaScript中,有哪些奇技淫巧是Java所没有的?

类和对象

在JavaScript中,类的定义只是一个Map键值对,没有其他。

1
2
3
4
var person = {
    name : "xiaohong",
    age  : 18
}

那么JavaScript中的类中没有方法吗?有!但是也是键值对。

1
2
3
4
5
6
7
var person = {
    name : "xiaohong",
    age : 18,
    eat : function(){
        alert("i like eat meat");
    }
}

阅读更多