如何在javascript中进行封装

时间:2013-09-16 08:50:05

标签: javascript jquery

你能告诉我如何在javascript中进行封装。我有一个名为Car的类。我想用B类扩展这个类。其次我想覆盖和重载java脚本中的方法。

这是我的小提琴 http://jsfiddle.net/naveennsit/fJGrA/

   //Define the Car class
function Car() { }
Car.prototype.speed= 'Car Speed';
Car.prototype.setSpeed = function(speed) {
    this.speed = speed;
    alert("Car speed changed");
}


//Define the Ferrari class
function Ferrari() { }
Ferrari.prototype = new Car();


// correct the constructor pointer because it points to Car
Ferrari.prototype.constructor = Ferrari;

// replace the setSpeed method
Ferrari.prototype.setSpeed = function(speed) {
    this.speed = speed;
    alert("Ferrari speed changed");
}

var car = new Ferrari();
car.setSpeed();

你能解释这两行

吗?

Ferrari.prototype = new Car();      这条线显示法拉利是通过汽车延伸的吗?

 Ferrari.prototype.constructor = Ferrari;

这条线的用途是什么?

2 个答案:

答案 0 :(得分:0)

JS在设计上没有提供管理对象成员可见性的内置方法。但它足够灵活,可以让我们进行封装。

我找到的有效记录是http://www.codeproject.com/Articles/108786/Encapsulation-in-JavaScript

答案 1 :(得分:0)

Ferrari.prototype = new Car()

这种方法为Carrari的原型增添了Car poperties。无论Car()返回什么,都会添加到现有的法拉利原型中。

Ferrari.prototype.constructor = Ferrari

Prototype有一个构造函数属性,该属性被此调用覆盖 Ferrari.prototype = new Car()。这是再次手动重置。

prototype and constructor object properties

我编辑了你的小提琴。 http://jsfiddle.net/fJGrA/3/

在javascript中使用闭包,您可以隐藏对象或函数中的元素。

function foo(args){
//this is a private variable.
 var _name = ""

 return{
  getname:function(){
   return _name
   }
  }

 }

 bar = new foo()

 // name can only be accessed from inside the foo function.

每当在函数中使用 var 关键字创建变量时,只能在该函数的范围内访问该变量。实际上是私有的。