此示例实现了矩形的私有变量。变量myLength和myWidth对于不同的实例是不同的。那么为什么不推荐这种方法呢?
var rectangle = function() {
var myLength = 8;
var myWidth = 6;
var getMyLength = function () {
return myLength;
};
var setMyLength = function (value) {
myLength = value;
};
var getMyWidth = function () {
return myWidth;
};
var setMyWidth = function (value) {
myWidth = value;
};
var drawFigure = function() {
console.log("Draw invoked for figure: " +
getMyLength() + " * " + getMyWidth());
};
return {
getMyLength: getMyLength,
setMyLength: setMyLength,
getMyWidth: getMyWidth,
setMyWidth: setMyWidth,
drawFigure: drawFigure
}
};
然后我们按如下方式使用它:
var myRectangle = new rectangle();
myRectangle.drawFigure(); // Draw invoked for figure: 8 * 6
myRectangle.setMyLength(3);
myRectangle.setMyWidth(5);
myRectangle.drawFigure(); // Draw invoked for figure: 3 * 5
var myRectangle1 = new rectangle();
myRectangle1.drawFigure(); // Draw invoked for figure: 8 * 6
答案 0 :(得分:2)
在我看来,私人变量被高估了。你真的需要隐藏程序员的东西吗?不会。即使您公开了所有私人变量,它会有什么不同?事实上,我主张公开一切,因为:
console.log
一个对象,那么你可以检查它的公共属性,这使得调试更容易,因为你可以看到对象的状态。您不需要创建不必要的getter和setter。将变量设为私有然后允许任何人使用getter和setter函数修改它有什么意义?你也可以将变量公之于众。
以我的拙见,吸气剂和制定者只对幻像属性有用:
var Person = defclass({
constructor: function (firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
},
getFullName: function () {
return this.firstName + " " + this.lastName;
},
setFullName: function (fullName) {
var name = fullName.split(" ");
this.firstName = name[0];
this.lastName = name[1];
}
});
因此,在我看来,您应该按照以下方式编写Rectangle
课程:
var Rectangle = defclass({
constructor: function (width, height) {
this.width = width;
this.height = height;
}
});
然后我们按如下方式使用它:
var rectA = new Rectangle(8, 6);
console.log(rectA); // { width: 8, height: 6 }
rectA.width = 3;
rectA.height = 5;
console.log(rectA); // { width: 3, height: 5 }
var rectB = new Rectangle(8, 6);
console.log(rectB); // { width: 8, height: 6 }
最后,defclass
的定义:
function defclass(prototype) {
var constructor = prototype.constructor;
constructor.prototype = prototype;
return constructor;
}
所以这只是我在JavaScript中创建对象的两分钱。