我们知道何时使用对象文字或当我们使用 Object.Create()来继承父对象的新对象时,子对象会继承所有父对象的属性和功能。
那么,我们如何隐藏私有成员构成继承类?
因此,如果我们不能,则意味着将功能用作类和" 新"要从父类继承的关键字,是在JavaScript中到达 ENCAPSULATION 的唯一方法!
答案 0 :(得分:1)
获取封装的最简单方法是函数或匿名函数(闭包)。这是信息隐藏和getter / setter逻辑的一个例子,而经典的JS(不是ES6 / Harmony)不会显然支持它:
var obj = (function () {
var hidden;
hidden = 1973;
return {
"get": function () { return hidden; },
"set": function (v) { hidden = v; }
};
}()); // define and execute right away
您现在可以使用obj
,如下所示:
obj.get() // returns the hidden value
obj.set(1982) // sets the hidden value
信息隐藏的演示:
obj.hidden // no dice
JS中的OO编程并不真正支持经典继承。 它支持原型继承,它有其不同之处。
答案 1 :(得分:1)
简短回答是否定。对象文字中的所有属性都是公开的(至少从ES5开始)。
也就是说,感谢lexical scoping,Javascript中存在封装确实,并且可以通过closures来实现。
例如,myObjectWithPrivateMembers
返回的对象可以访问封装的属性value
,该属性不公开/可访问(因为该对象在闭包中定义)。
function myObjectWithPrivateMembers() {
var value = 1;
var addOne = function() {
value++;
};
var getValue = function() {
return value;
};
return {
addOne: addOne,
getValue: getValue
};
}
var test = myObjectWithPrivateMembers();
test.value; // undefined
test.getValue(); // 1
test.addOne();
test.getValue(); // 2