[英]Access a member variable from a private method in JavaScript
lick()是Cat的私有方法。 不幸的是,无法在lick()中访问Cat的this.paw。 有没有简单的方法来创建可以访问其包含类的成员变量的私有方法?
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p id="catStatus">???</p>
<script>
function Cat() {
this.paw;
var lick = function() {
alert(this.paw);
if(this.paw == "sticky") {
alert("meow");
document.getElementById("catStatus").innerHTML = "*Slurp*";
}
};
this.beCat = function() {
this.paw = "sticky";
lick();
}
}
var kitty = new Cat();
kitty.beCat();
</script>
</body>
</html>
值this
取决于你如何调用该方法。
由于您没有在对象实例上调用方法, this
它将成为全局对象。
相反,你需要保存this
一个变量:
function Cat() {
this.paw = ...;
var me = this;
var lick = function() {
alert(me.paw);
if(me.paw == "sticky") {
alert("meow");
document.getElementById("catStatus").innerHTML = "*Slurp*";
}
};
this.beCat = function() {
this.paw = "sticky";
lick();
}
}
有两种解决方法。 问题在于,lick内部的上下文不是cat的实例。 您可以:
使用call方法设置上下文
this.beCat = function() {
this.paw = "sticky";
lick.call(this);
};
或使用闭包
var instance = this;
var lick = function() {
alert(instance.paw);
if(instance.paw == "sticky") {
alert("meow");
document.getElementById("catStatus").innerHTML = "*Slurp*";
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.