我在网上讲座中看到了这一点,我想知道返回声明是怎么回事?
myAcessors = (function() {
var data = "data";
var getData = function() {
console.log(data);
};
var setData = function(val) {
data = val;
};
return {
getData: getData,
setData: setData
};
})();
答案 0 :(得分:1)
myAcessors
是一个包含属性getData
和setData
的对象,它们都是函数。
myAcessors = (function() {
var data = "data";
var getData = function() {
console.log(data);
};
var setData = function(val) {
data = val;
};
return {
getData: getData,
setData: setData
};
})();
例如,您可以致电myAcessors.getData()
,它将返回"data"
。
使用匿名函数将括号内的所有代码括起来。请注意myAcessors.data
不会返回任何内容。这是因为可变数据存在于匿名函数内部并且无法转义,除非您提供了一种方法:即get方法。在您的情况下,您确实有一个get方法:getData
将从闭包内返回变量。
您可以说您的属性是私有的,因为没有get方法就无法访问它们。
在JavaScript中声明对象的一种更常见的方法是:
myAcessors = {
data: "data",
getData: function() {
console.log(this.data)
},
setData: function(data) {
this.data = data
}
}
但是这里 myAcessor.data
确实会归还该属性。与其他对象不同,这次您可以访问对象外的所有myAcessor
属性。
答案 1 :(得分:1)
实际上这种技术叫做 closure ,它基本上是一个自我初始化函数(在这种情况下)返回一个对象并封装方法上下文。
myAcessors
内的函数/变量定义(例如data
)将模拟私有方法或私有变量。将它们视为闭包函数外部无法访问的静态。
要进一步说明,如果您查看ECMAScript 2015 class语法,myAcessors
将如下所示:
class myAcessors {
static data = 'data';
getData = () => {
console.log(this.data);
};
setData = val => {
this.data = val;
};
}