Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们能在JavaScript中实现对象文本的封装吗?_Javascript - Fatal编程技术网

我们能在JavaScript中实现对象文本的封装吗?

我们能在JavaScript中实现对象文本的封装吗?,javascript,Javascript,我们知道当我们使用对象文字时,或者当我们使用对象时。Create()要继承父对象的新对象,子对象继承父对象的所有属性和函数 那么,我们如何从继承的类中隐藏私有成员呢 因此,如果我们不能,这意味着使用函数作为类和从父类继承的“new”关键字,是在JavaScript中实现封装的唯一方法 获得封装的最简单方法是函数或匿名函数(闭包)。这是一个信息隐藏和getter/setter逻辑的示例,而经典的JS(不是ES6/Harmony)显然不支持它: var obj = (function () {

我们知道当我们使用对象文字时,或者当我们使用对象时。Create()要继承父对象的新对象,子对象继承父对象的所有属性和函数

那么,我们如何从继承的类中隐藏私有成员呢


因此,如果我们不能,这意味着使用函数作为类和从父类继承的“new”关键字,是在JavaScript中实现封装的唯一方法

获得封装的最简单方法是函数或匿名函数(闭包)。这是一个信息隐藏和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编程并不真正支持经典继承。 它支持有其差异的原型继承


简而言之,答案是否定的。对象文本中的所有属性都是公共的(至少截至)

这就是说,由于,封装确实存在于Javascript中,并且可以通过使用来实现

例如,
myObjectWithPrivateMembers
返回的对象可以访问封装属性
value
,该属性不公开/不可访问(因为该对象是在闭包中定义的)


“如何隐藏私有成员”JavaScript中没有私有成员(我假设是属性)。你能举一个例子来说明你在说什么吗?封装可以通过JS中的闭包来完成。@Amir:当然,但这与对象文字有什么关系?按照当前发布的标准(ES 5.1),没有办法在对象上拥有私有属性。不过,为了支持这一想法,ECMAScript 6中引入了一些新技术。访问属性需要使用相同的符号。@阿米尔:您不能。这就是我评论的重点。没有私人财产。没有“私人成员”。您所指的是使用闭包来封装数据。我不会称之为“私人会员”。我已经说过我知道这一点。我想知道是否有可能实现对象文本的封装?啊,好的:)好吧。。。我认为这些评论已经很好地回答了ES5和ES6的问题……我知道原型继承和经典继承。我想说的是,在一些文章中,我们看到他们试图将面向类的概念引入面向对象(比如说面向原型)。我可以引用《你不知道JS》一书中的一段话:“我相信标签“原型继承”本身(并试图错误地应用所有相关的面向类的术语,如“类”、“构造函数”、“实例”、“多态性”等)在解释JavaScript机制的真正工作原理时弊大于利。”你说得对,它弊大于利。尤其是弗拉纳根的《圣经》在第五版之前一直具有明显的误导性。我们不得不等待Crockford的“好的部分”,看看OO模式在没有类的情况下到底有多好。有很多平庸的JS书籍。不要在上面浪费时间:)
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