[英]JavaScript Self Invoking function properties
试图更好地理解 JS,有几个澄清。 让我们假设我们有以下方法
var customer = function(){
var name = "Contoso";
return {
getName : function(){
return this.name;
},
setName : function(newName){
this.name = newName;
}
}
}();
为什么名称在外部不可见?,当我们记录 (customer.name) 其未定义时,但是如果我们删除函数上的自初始化括号并将变量声明更改为 (this.name) & 再次登录时我们可以看价值。 我在这里错过了什么。
您需要考虑到 JavaScript 并没有真正的本机类。 话虽如此,您可以创建构造函数以“模仿”一个类并能够使用this
您需要创建如下内容:
function fnc (string) {
this.string = string;
}
fnc.prototype.getString = function() {
return this.string;
}
var x = new fnc('bar');
console.log(x.getString()); //bar
这称为构造函数模式。 您要做的是使用称为模块模式的东西,它的工作原理如下:
var fn = (function() {
var string = 'foo';
return {
getString() {
return string;
}
}
})();
console.log(fn.getString()); //foo
这是一个工作示例: https : //repl.it/FCn7
另外,请阅读: https : //addyosmani.com/resources/essentialjsdesignpatterns/book/
使用带有模块模式的getString
和setString
编辑示例
var fn = (function() {
var string = 'foo';
return {
getString() {
return string;
},
setString(str){
string = str;
}
}
})();
fn.setString('xyz');
console.log(fn.getString()); // xyz
var
正在函数作用域内创建变量,该变量在函数属性之外不可用。 如果你想访问像customer.name
这样的属性,你需要像你注意到的那样将它初始化为this.name
。
这个例子中的var
就像创建可以被函数修改的私有变量,但不能直接修改。
所以这会起作用:
var customer = function(){
var name = "Contoso";
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
}();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.