关于javascript面向对象特性的读书笔记

学习javascript的类面向对象特性;
1、对象直接量,其实就是直接定义一个多个值对的组合,例如:
var homer = {
  name: "Homer Simpson",
  age: 34,
  married: true,
  email: "homer@163.com"
  }
2、对象的属性:可以把一个值赋值给对象的一个新属性来创建他,例如:
var  book = new Object();
book.title = "Learn c#";
book.chapter1 = "class and  object";
book.chapter1.page = 14;
 这里book原来只是一个Object类的对象,没有任何的属性,可是这里通过赋值语句就给他添加了title和chapter1两个属性,那么在接下来的代码中就可以开始使用这些属性了。
注意,这里还使用了属性的嵌套;
这个特性应该算是比较神奇的,以前在别的语言中没有见到过;
3、函数是存储在变量中的值;可以通过把函数赋值给对象的一个属性来定义个方法,比如:
// define a class  Rectangle
function Rectangle(w,h)
{
 this.Width = w;
 this.Height = h;
}
//define a function
function compute_area()
{
 return this.Width * this.Height;
}
//create a object
var page = new Rectangle(10,20);
//将函数赋值给对象的一个变量
page.area = compute_area;
//call the function through area;
var area = page.area();
当然了,下面这样的定义会更加合理一些:

function Rectangle_resize(w,h){this.Height=h; this.Width =w;}
function Rectangle_enlarge(){ this.Height = this.Height*2; this.Width = this.Width*2}
function Rectangle(w,h)
{
 this.Width = w;
 this.Height = h;
 this.resize =  Rectangle_resize;
 this.enlarge = Rectangle_enlarge;
}
4、原型对象(Prototype)
使用了远行对象之后,javascript在表达方面才真正具有了面向对象的感觉;
由于原型对象的属性被类的所有对象共享,所有他通常只用来定义类中所有对象的相同的属性。这使得原型对象适用于定义方法和一些常量;(p144)
javascript采用的是以原型对象为基础的继承机制,而不是以类为基础的继承机制;所以在我们理解来看,他并不是真正的面向对象语言;
在javascript并没有真正的类的概念,但是他通过构造函数和原型对象模拟了类;所以我们可以用他来模拟面向对象;
下面给出一个原型对象的例子:
//定义了一个构造函数
function Circle(r)
{
 this.R =r;
}
//定义了一个类属性
Circle.PI=3.14159;
//定义了一个类方法
Circle.max= function(a,b)
{
 if (a.R>b.R)
  return a
 else
  return b
}
//定义了一个对象方法Area
Circle.prototype=
{
 Area:function(){
  return Circle.PI* this.R*this.R;
 } 
}
//使用该类
var a = new Circle(10);
var b = new Circle(20);
alert(a.Area());
var c = Circle.max(a,b);
alert(c.R);
5、类的层次
一般来说,javascript中的类都是Object的直接子类,这是javascript所特有的。因为一般来说不需要太复杂的类层次体系;
但是有的时候我们可能还是会需要一些基层。
由于javascript的继承体系是基于prototype的,所以我们要从prototype入手,假如我们要为上面的Circle添加一个子类,那么只要让AnotherCircle的prototype对象是Circle类的一个实例就可以了:
function AnotherCircle(r)
{
 this.R = r;
}
AnotherCircle.prototype = new Circle(0);
AnotherCircle.prototype.constructor = AnotherCircle;
6、用数组的方式来访文对象的属性
例如对于上面的Circle类:
var c = new Circle(1);
alert(c["R"]);
如果使用一个对象是采取的是这种形式,我们常常称之为关联数组;

原文地址:https://www.cnblogs.com/strinkbug/p/598477.html