【发布时间】:2018-05-05 10:20:59
【问题描述】:
我知道这已经被问过了,但已经研究过并且失败了 - 抱歉!
我想尽可能简单地在 JS 中实现封装。我意识到课堂上的任何“var”都是私有的。
我只是不确定如何获取和设置任何私有变量的值。在下面的示例中,GETTING 和 SETTING 'color' 的接口方法不起作用,因为这些函数无法访问对象的私有 'color' 属性。我找不到一个清楚的例子来告诉我如何实现它。
我什至不确定使用“.prototype”是将这些方法添加到类中的最佳方式。
谢谢!
<button onclick="testOOP()">Click me</button>
<script>
//<!--
function testOOP(){
var v1 = new vehicle(4, "red"); //setting new values during instantiation
var v2 = new vehicle(2, "blue");
showVehDetails(v1);
showVehDetails(v2);
v2.wheels=1; //demonstrating no encapsulation
showVehDetails(v2);
v2.setcolour("orange"); //using an interface - fails
showVehDetails(v2);
}
function showVehDetails(v){
document.write("This vehicle is " + v.getcolour() + " and has " + v.getwheels() + " wheels.<br/>");
}
//*************'vehicle' - Class definition**************
function vehicle(thewheels, thecolour){
this.wheels = thewheels; //public property
var colour = thecolour; //private property
}
vehicle.prototype = {
constructor: vehicle,
getcolour: function(){
return this.colour; //but how to create a GETTER for colour?
},
getwheels: function(){
return this.wheels;
},
setwheels: function(newwheels){
this.wheels = newwheels;
},
setcolour: function(newcolour){ //and how to create a SETTER for colour?
this.colour = newcolour;
}
}
//************End class definition************************
//-->
</script>
【问题讨论】:
-
mmm 在 javascript 中不存在真正的类,总是原型一个 inteherance
-
如果要启用获取和设置,只需将它们设为公共属性?!
-
@Bergi,这是一个学术练习,旨在找到使用 JavaScript 演示封装的最简单方法。我通常会使用公共属性或 _properties。
标签: javascript encapsulation setter getter