--从类的角度谈JavaScript对象
(由于JavaScript本身就一种若类型语言,本身是没有类的概念的为了理解而添加的)
JavaScript类的私有变量是无法创建的,但是它有一个是私有变量的约定
(属性一下划线开头定义则认为是私有的,类的定义者是不希望被访问的)。
通常都给一个方法作为接口让外界访问类属性
function Circle(radius)
{
this ._radius = radius;
}
// 它可以更深的让人感受到函数也是对象.因此我们也可以为函数添加属性。
Circle.PI = 3.141596;
Circle.prototype.getRadius = function()
{
return this._radius;
}
Circle.prototype.area = function()
{
// this.PI是无法访问到PI值的.因为此时的this是当前被创建好的对象。
return Circle.PI * this.getRadius() * this.getRadius();
}
Circle.prototype.girth = function()
{
return 2 * Circle.PI * this.getRadius();
}
//重写Object的toString()方法:
Circle.prototype.toString=function(value)
{
document.writeln("The result is: " +value);
}
var circle = new Circle(3);
circle.toString( circle.area());
circle.toString( circle.girth());
--类的继承
Object 是所有建立类的超类 ,所有创建的类都继承了Object的属性和方法,
于此同时创建的类也继承了prototype原形对象的熟悉和方法。
原因:prototype本身就是一个对象;是有Object()构造器进行创建 也就是说prototype对象本身就继承了来自Object.prototype的属性
function Rectangle(width, height)
{
this.width = width;
this.height = height;
}
Rectangle.area = function()
{
return this.width * this.height;
}
Cuboid.prototype.superclass = Rectangle;
//根据一个原理:每一个创建的类都将继承Object和prototype完成类的继承
function Cuboid(len, wid, hei)
{
this.len = len;
Rectangle.call(this,wid,hei);//使用call方法调用Rectangle构造器
}
//这步是完成继承的关键点(Cuboid继承prototype,Cuboid.prototype=new Rectangle()自然Cuboid就继承Rectangle了)
Cuboid.prototype=new Rectangle();
Cuboid.prototype.volume=function()
{
return this.width*this.height*this.len;
}
document.writeln(new Cuboid(10,10,10).volume());