我是 JavaScript 新手。在使用给定的javascript时,我期望输出值为“123”;“测试1”;“456”和“test2”,因为有两个实例。
但返回值为 "456";"test2"; “456”和“test2”。
如果我将设置器更改为处理“this”(目前已在代码中删除),问题就解决了。我无法理解为什么原型对象的行为不同。
我不想用这个声明变量,因为我希望变量是私有的,只能通过 getter/setters 方法访问。
<html>
<head>
<script type="text/javascript">
function Test(){
var name;
var id;
Test.prototype.setId = function(newId){
id = newId;
}
//this.id = function(newId){
Test.prototype.getId = function(newId){
return id;
}
Test.prototype.setName = function(newName){
name = newName;
}
//this.getName = function(newGuid){
Test.prototype.getName = function(newGuid){
return name;
}
}
function callme(){
var instance1 = new Test();
instance1.setId("123");
instance1.setName("test1");
var instance2 = new Test();
instance2.setId("456");
instance2.setName("test2");
alert(instance1.getId());
alert(instance1.getName());
alert(instance2.getId());
alert(instance2.getName());
}
</script>
</head>
<body>
<button onclick='callme()'> Test </button>
</body>
</html>
根据下面给出的 Matt 的建议,我已经更改了我的代码。但是代码不适用于继承。我修改了代码如下。当前实现创建派生类型的对象并尝试调用基类的方法。
<html>
<head>
<script type="text/javascript">
(function () {
var stores = [];
var counter = 0;
Test = function () {
this.storeId = stores.length;
stores.push({});
}
Test.prototype.setGuid = function (newId) {
stores[this.storeId].id = newId;
}
Test.prototype.getGuid = function (newId) {
return stores[this.storeId].id;
}
Test.prototype.setName = function (newName) {
stores[this.storeId].name = newName;
}
Test.prototype.getName = function (newGuid) {
return stores[this.storeId].name;
}
})();
Derived.prototype = new Test();
Derived.prototype.constructor = Derived
function Derived(){
Test();//call to base class
//some additional method
}
function callme(){
var instance1 = new Derived();
instance1.setGuid("123");
instance1.setName("test1");
var instance2 = new Derived();
instance2.setGuid("456");
instance2.setName("test2");
alert(instance1.getName());
alert(instance1.getGuid());
alert(instance2.getName());
alert(instance2.getGuid());
}
</script>
</head>
<body>
<button onclick='callme()'> Test </button>
</body>
</html>
stores
其次,当变量被清除(超出范围)时,我不确定是否要从变量中清除内存。