你能告诉我如何在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;
这条线的用途是什么?
答案 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 关键字创建变量时,只能在该函数的范围内访问该变量。实际上是私有的。