我正在关注一个教程,该教程显示了在 javascript 中创建对象的工厂模式。下面的代码让我很难理解它为什么起作用。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>6-2.htm</title>
</head>
<body>
<script type="text/javascript">
function createAddress(street, city, state, zip) {
var obj = new Object();
obj.street = street;
obj.city = city;
obj.state = state;
obj.zip = zip;
obj.showLabel = function() {
//alert(this.street + "\n" + this.city + ", " + this.state + " " + this.zip);
//var obj;
alert(obj.street + "\n" + obj.city + ", " + obj.state + " " + obj.zip);
};
return obj;
};
var JohnAddr = createAddress("12 A St.", "Johnson City", "TN", 37614);
var JoeAddr = createAddress("10061 Bristol Park", "Pensacola", "FL", 32503);
JohnAddr.showLabel();
JoeAddr.showLabel();
</script>
</body>
</html>
第一个注释行对我来说似乎很合适(使用this
showLabel 函数中的关键字)。我不确定在它的位置使用 obj 是如何工作的。obj 必须在某处引用全局变量,因为在该函数运行时没有定义 obj,对吗?因为我制作了 2 个对象,所以在这种情况下,两者都能正常显示,这不仅仅是运气,obj 内容的旧值也被正确存储和引用。但如何?如果我取消注释第二条评论,那么它就会中断,我明白为什么,现在我明确告诉 js,我正在谈论一个局部变量并且没有。