javascript中的类型和对象分析

Javascript是一种基于对象,和任何元素可以被视为一个对象。然而,类型和对象是不同的。在这篇文章中,除了讨论一些类型和对象的特点,我们更重要的是学习如何写出好的、可重用的类型。毕竟,Javascript脚本语言的流行可以很好的封装,形成一个巨大的类型库,这是很有意义的再利用。

在互联网上有很多关于原型的文章,他们从来没有理解过核心思想。最后,我们写了许多例子来理解原型只能在一种类型上使用。

下面是一些类型和对象的示例,在您阅读示例之后,您可能更容易理解类型和对象之间的连接。








示例代码

解释




object.prototype.property = 1;
(object.prototype.method =功能)
{
警报(1);
}

var obj =新的对象();
警报(obj。财产);
对象的方法();

你可以使用proptotype一类添加行为类型。这些行动只能体现在实例的类型。

允许在JS类型数组、布尔、日期、Enumerator、错误、功能、数量、对象、正则表达式、字符串。




var obj =新的对象();
obj.prototype.property = 1; / /错误
错误
obj.prototype.method =功能()
{
警报(1);
}

不能在实例上使用原型,否则会出现编译错误。




对象:属性= 1;
方法=函数()
{
警报(1);
}

警报(对象,属性);
对象(方法);

可以定义类型的静态属性和方法,它们按类型直接上调。




对象:属性= 1;
方法=函数()
{
警报(1);
}
var obj =新的对象();
警报(obj。财产); / /错误
对象方法(); / /错误

实例不能调用类型的静态属性或方法,或不能由对象定义的错误。




Aclass()函数
{
此属性= 1;
这个方法=函数()
{
警报(1);
}
}
var obj =新Aclass();
警报(obj。财产);
对象的方法();

这个示例演示了用Javascript定义类型的常用方法。




Aclass()函数
{
此属性= 1;
这个方法=函数()
{
警报(1);
}
}
aclass.prototype.property2 = 2;
aclass.prototype.method2 =功能
{
警报(2);
}
var obj =新Aclass();
警报(obj。财产);
obj.method2();

可以使用外部原型将属性和方法添加到自定义类型中。




Aclass()函数
{
此属性= 1;
这个方法=函数()
{
警报(1);
}
}
aclass.prototype.property = 2;
aclass.prototype.method =功能
{
警报(2);
}
var obj =新Aclass();
警报(obj。财产);
对象的方法();

自定义类型的属性或方法不能通过外部原型更改。
这个例子表明调用的属性和方法仍然是初始定义的结果。




Aclass()函数
{
此属性= 1;
这个方法=函数()
{
警报(1);
}
}
var obj =新Aclass();
Obj。财产= 2;
obj方法=函数()。
{
警报(2);
}
警报(obj。财产);
对象的方法();

可以更改对象上的属性(这是肯定的)。
您还可以更改对象上的方法(与面向对象的通用概念不同)。




Aclass()函数
{
此属性= 1;
这个方法=函数()
{
警报(1);
}
}
var obj =新Aclass();
obj.property2 = 2;
obj.method2 =功能()
{
警报(2);
}
警报(obj。财产);
obj.method2();

可以将属性或方法添加到对象中。




AClass()函数
{
此属性= 1;
这个方法=函数()
{
警报(1);
}
}

aclass2()函数
{
this.property2 = 2;
this.method2 =功能()
{
警报(2);
}
}
aclass2.prototype =新AClass();

var obj =新aclass2();
警报(obj。财产);
对象的方法();
警报(obj。财产);
obj.method2();

这个例子说明了一个类型是如何从另一个类型继承的。


十一

AClass()函数
{
此属性= 1;
这个方法=函数()
{
警报(1);
}
}

aclass2()函数
{
this.property2 = 2;
this.method2 =功能()
{
警报(2);
}
}
aclass2.prototype =新AClass();
aclass2.prototype.property = 3;
aclass2.prototype.method =功能()
{
警报(4);
}
var obj =新aclass2();
警报(obj。财产);
对象的方法();

这个例子表明,子类重写父类的属性或方法。
在上面的例子中,重用方面要通过类型来实现是很重要的:
允许在示例1中添加行为的类型:Javascript
示例2所使用的限制:原型
示例3:如何定义类型的静态成员
示例7:原型对重新定义成员类型的限制
示例10:如何使一个类型从另一个类型继承
示例11:如何在子类中重新定义父类的成员

Javascript可以实现的面向对象特性是:
公共财产(公共领域)
公共方法(公共方法)
私有财产(私人领域)
私有方法(私有字段)
方法重载(方法过载)
构造函数(构造函数)
事件(事件)
单一继承(单继承)
子类重写父类的属性或方法(重写)
静态属性或方法(静态成员)