JavaScript是一个类C的语言,他的面向对象的东西相对于C++/Java比较奇怪,但是其的确相当的强大,本文主要从一个整体的角度来说明一下JavaScript的面向对象的编程。这篇文章主要基于ECMAScript 5,旨在介绍新技术。关于兼容性的东西,请看最后一节。
初探
我们知道JavaScript中的变量定义基本如下:
var name = 'Chen Hao';;
var email = 'haoel(@)hotmail.com';
var website = 'http://coolshell.cn';
如果要用对象来写的话,就是下面这个样子:
//以成员的方式
chenhao.name;
chenhao.email;
chenhao.website;
//以hash map的方式
chenhao["name"];
chenhao["email"];
chenhao["website"];
关于函数,我们知道JavaScript的函数是这样的:
var sayHello = function(){
var hello = "Hello, I'm "+ this.name
+ ", my email is: " + this.email
+ ", my website is: " + this.website;
alert(hello);
};
//直接赋值,这里很像C/C++的函数指针
chenhao.Hello = sayHello;
chenhao.Hello();
相信这些东西都比较简单,大家都明白了。可以看到JavaScript对象函数是直接声明,直接赋值,直接就用了。runtime的动态语言。
还有一种比较规范的写法是:
//我们可以看到, 其用function来做class。
var Person = function(name, email, website){
this.name = name;
this.email = email;
this.website = website;
this.sayHello = function(){
var hello = "Hello, I'm "+ this.name + ", \n" +
"my email is: " + this.email + ", \n" +
"my website is: " + this.website;
alert(hello);
};
};
var chenhao = new Person("Chen Hao", "haoel@hotmail.com",
"http://coolshell.cn");
chenhao.sayHello();
顺便说一下,要删除对象的属性,很简单:
delete chenhao['email']
上面的这些例子,我们可以看到这样几点:
- Javascript 的数据和成员封装很简单。没有类完全是对象操作。纯动态!
- Javascript function中的this指针很关键,如果没有的话,那就是局部变量或局部函数。
- Javascript 对象成员函数可以在使用时临时声明,并把一个全局函数直接赋过去就好了。
- Javascript 的成员函数可以在实例上进行修改,也就是说不同实例相同函数名的行为不一定一样。
属性配置 – Object.defineProperty
先看下面的代码:
//创建对象
var chenhao = Object.create(null);
//设置一个属性
Objec
defineProperty( chenhao,
'name', { value: 'Chen Hao',
writable: true,
configurable: true,
enumerable: true });
//设置多个属性
Object.defineProperties( chenhao,
{
'email' : { value: 'haoel@hotmail.com',
writable: true,
configurable: true,
enumerable: true },
'website': { value: 'http://coolshell.cn',
writable: true,
configurable: true,
enumerable: true }
}
);
下面就说说这些属性配置是什么意思。
- writable:这个属性的值是否可以改。
- configurable:这个属性的配置是否可以改。
- enumerable:这个属性是否能在for…in循环中遍历出来或在Object.keys中列举出来。
- value:属性值。
- get ()/set (_value):get 和 set 访问器。
Get/Set访问器
关于get/set访问器,它的意思就是用 get/set 来取代 value(其不能和 value 一起使用),示例如下:
var age = 0;
Object.defineProperty( chenhao,
'age', {
get: function() {return age+1;},
set: function(value) {age = value;}
enumerable : true,
configurable : true
}
);
chenhao.age = 100; //调用set
alert(chenhao.age); //调用get 输出101(get中+1了);
我们再看一个更为实用的例子——利用已有的属性(age)通过get 和 set 构造新的属性(birth_year):
http://sd.csdn.net/a/20120110/310412.html
分享到:
相关推荐
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...
JavaScript是一种广泛应用于Web开发的动态编程语言,尤其在构建交互式网页和富互联网应用...《JavaScript面向对象编程指南》这本书将帮助你进一步探索这个主题,通过实例和详细的解释,提升你的JavaScript编程技能。
总结来说,JavaScript面向对象编程涵盖了从基本原理到实现细节的多个方面,包括但不限于对象、构造函数、原型链、继承以及封装等。本书系统地介绍了这些知识点,并通过实例演示了如何在现代JavaScript中实现OOP,...
在本“JavaScript面向对象编程”主题中,我们将深入探讨这一概念及其在JavaScript中的应用。 1. **对象和类的概念**:在面向对象编程中,对象是数据和操作这些数据的方法的集合。在JavaScript中,对象是由键值对...
下面将详细探讨JavaScript中的面向对象编程。 一、对象与属性 在JavaScript中,一切皆为对象,包括基本数据类型。我们可以创建自定义对象,通过花括号`{}`来定义一个对象字面量,如: ```javascript let person = {...
作者深入浅出地介绍了面向对象编程的基本原理以及如何将这些原理应用于JavaScript中。 #### 二、面向对象编程基础 面向对象编程(OOP)是一种软件开发方法,它通过将数据和处理这些数据的方法捆绑在一起形成“对象”...
这两本书——"JavaScript 面向对象编程.pdf"和"JavaScript 设计模式与开发实践.pdf"将深入探讨这些主题。 面向对象编程在JavaScript中主要体现在三个方面:封装、继承和多态。封装是指将数据和操作数据的方法捆绑在...
在本项目"小游戏JavaScript面向对象编程贪吃蛇"中,我们将深入探讨如何使用JavaScript进行面向对象编程,来实现经典的贪吃蛇游戏。面向对象编程(Object-Oriented Programming, OOP)是编程的一种范式,它将程序设计...
最后,`demo.html`可能是一个示例网页,展示了如何在实际项目中使用上述的JavaScript面向对象编程技术。它可能包含了HTML结构,以及引入`JSLogger.js`的脚本,通过创建和操作对象来展示其功能。 总的来说,这篇博客...
1.本书是唯一一本介绍JavaScript面向对象编程的图书。, 2.本书作者是知名的Web开发人员和作者。受到国内众多前端开发人员,如淘宝UED团队的推崇和推荐。 Stoyan Stefanov:Facebook公司工程师、作家、演说家。他经常...
下面将详细探讨JavaScript面向对象编程的核心概念、特性以及实际应用。 1. **对象与数据封装** 在JavaScript中,对象是键值对的集合,可以看作是属性和方法的容器。通过创建对象,我们可以封装数据和相关操作,...