日期:2014-05-16  浏览次数:20399 次

javascript 学习__1

js是一种基于原型的语言,建立新类的时候,是新建一个包含指定的属性和方法的构造函数,而并不是不是新建立一个类类型。this关键字用于指代那个类生成的实例。可以这样理解this对象,它本质上就是一个包含成员入口的属性列表。

类本质上就是一个function,用new操作符出来的就是一个对象object
function本身就带有一个object--prototype,每个function都有且只有一个prototype,当然prototype是可以形成链的。

例如:
function A()
{
  this.value1 = 1;
  this.func1 = function(){};
  A.value2 = 2;
  A.func2 = function(){};
}

value1和func1是属于new出来的对象的属性。
value2和func2是属于function A的属性。

在prototype上定义的属性和方法被类(function)和对象(object)共享。

this也是一个类,它为类A的实例x所拥有,而不为类A所拥有。

值得注意的是类A的属性value2和方法func2,在它本身定义的时候并不存在,也就是说在,语句“var x= new A;”之前不存在,直到语句“var x= new A;”之后才存在。也就是说,类A自身的属性和方法直到它被第一次实例化之后才有意义。但是A.prototype的属性和方法与此不同,它自从定义的时候就存在了,与实例化无关。

类中静态属性和方法的定义:

目前被认可的有两种方法:(同样用上例作说明)
1.采用上述A.value定义静态属性,采用A.func定义静态方法
2.采用上述A.prototype.value定义静态属性,采用A.prototype.func定义静态方法

采用方法1和2在一般情况下是一样的,但是还是有一定的差别,举例说明如下:

(1).类A的实例x并没有属性value2和方法func2,也就是说x.value2和x.func2都不存在,只存在A.value2和A.func2。
(2). x.value3改变的时候 A.prototype.value3不改变,但是 A.prototype.value3改变的时候 x.value3将随之改变