2017-04-05 112 views
-1
function() { 
    var name; 
    this.set = function(name) { 
    this.name = name; <-- this 
    } 
} 

我该如何编写该行,以便可以将该参数分配给私有变量?与Java不同,“this”也指向一个函数,所以我无法弄清楚。Javascript私有变量和参数具有相同的名称

+1

'this'不指向一个功能。您提供了一个不完整且无效的代码示例,因此很难确切知道您需要什么,但是一个问题是'name'参数隐藏了'name'变量。另一个是你没有设置变量;你在'this'引用的某个对象上设置一个属性。 – 2017-04-05 11:53:36

+0

您是否将外部函数用作类? –

回答

3

函数内部集合,内部name变量将获得比外部变量name更多的优先级变量。为了给外部变量赋值,你必须在内部或外部使用不同的名字。 然而,你可以不喜欢,

function() { 
    this.name = ''; 
    this.set = function(name) { 
    this.name = name; <-- this 
    } 
} 

这不分配新的值给私有变量,这是分配的值对象的属性。

+0

我更喜欢这个答案,因为我可以保留名称,它最好地描述变量,同时显示不同的所有者。 – Sgene9

+1

什么?这个答案没有道理!你永远不会初始化第2行声明的变量'name'。此外,你的'self'变量与'this'相同。与OP提供的代码有什么不同? –

+0

正确@AaditMShah,这会更有意义 'function(){ this.name =''; this.set = function(name){ this.name = name; < - 这个 } }' –

1

您只需要为参数使用不同的名称,因此它不会影响函数set之外的私有变量name,就这些了。

var SomeClass = function() { 
 
    var name; 
 
    this.set = function(otherName) { // argument should have a diffirent name so it won't shadow the other variable "name" 
 
    name = otherName; 
 
    } 
 
    this.get = function() { 
 
    return name; 
 
    } 
 
}; 
 

 
var ins = new SomeClass(); 
 
ins.set("Jim Carrey"); // OK 
 
console.log(ins.get()); // OK 
 
console.log(ins.name); // undefined as expected

+0

这是正确的答案,应该接受。 –

相关问题