gpt4 book ai didi

JavaScript 封装

转载 作者:搜寻专家 更新时间:2023-11-01 05:02:50 28 4
gpt4 key购买 nike

所以我一直在研究面向对象的完整开发 JavaScript 实践,并对以下示例感到好奇。

据我了解,(这对我来说很有意义)以下“ secret ”字段是“私有(private)”的:

var MyObject = function() {

var secret = 'sshhh';

this.getSecret() = function() {
return secret;
}

}

这是因为字段 secret 具有内部函数可以访问的函数范围,但外部没有任何内容......到目前为止一切顺利。

但我已经看到了以下内容(尤其是在 Douglas Crockford 的书中):

var MyObject = function() {

var secret = 'sshhh';

return {
getSecret : function() {
return secret;
}
}

}();

想知道有什么区别,为什么更好?我知道在这种情况下,我们甚至不会返回私有(private)字段所在的同一个对象,但看不到巨大的好处,因为您无法通过任何一种方式直接访问该字段。

最佳答案

这些例子非常不同......第一个创建一个“MyObject”函数,当使用new作为构造函数调用时,将有一个“getSecret”function 作为一个属性;第二个创建一个“MyObject”Object,并将“getSecret”function 作为属性。

在这方面,这有点像静态方法和公共(public)方法之间的区别。在第一种情况下,该方法仅在调用构造函数时存在,而不存在于构造函数本身中。在第二种情况下,没有构造函数。

假设您有:

var MyObject1 = function() {
var secret = 'sshhh';
this.getSecret = function() {
return secret;
}
}

// ...

var MyObject2 = function() {
var secret = 'sshhh';
return {
getSecret : function() {
return secret;
}
}
}();

运行一些测试:

MyObject1.getSecret();
// TypeError: Object has no method 'getSecret'
var m1 = new MyObject1();
m1.getSecret();
// "sshhh"

MyObject2.getSecret();
// "sshhh"
var m2 = new MyObject2();
// TypeError: object is not a function

所以 MyObject1 就像一个类,而 MyObject2 就像一个静态类。

关于JavaScript 封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348504/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com