首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript原型变量创建引用

javascript原型变量创建引用
EN

Stack Overflow用户
提问于 2013-09-21 12:37:44
回答 2查看 109关注 0票数 1

我对面向对象的javascript很陌生,因此这个问题可能很天真。

我有:

代码语言:javascript
复制
RIT.test = (function() {
    test.prototype.SRT = {
        someInSRT: 5
    };
    function test() {
    }
    return test;
})();

我正在做以下工作:

代码语言:javascript
复制
    var v1 = new RIT.test();
    var v2 = new RIT.test();
    v1.SRT.someInSRT = 10;
    v1.SRT.someInSRT = 5;
    console.log(v1.SRT.someInSRT);
    console.log(v2.SRT.someInSRT);

为什么v1.SRT.someInSRT和v2.SRT.someInSRT的值都是5?我想象我正在用“new”创建两个单独的实例。

有人能建议我一个更好的方法吗?FYI,SRT一定是对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-21 12:53:55

当您将SRT添加到原型中时,您将向您定义为

代码语言:javascript
复制
{
    someInSRT: 5
}

基于此原型的对象的所有新实例都将共享该引用。因此,v1.SRT === v2.SRT。因此,您对v1.SRT所做的任何更改都将通过v2.SRT可见;

在这种情况下,您需要的是:

代码语言:javascript
复制
RIT.test = (function() {
    function test() {
        this.SRT = {
            someInSRT: 5
        };
    }
    return test;
})();

这样,从RIT.test派生的所有对象都有自己的、独立的SRT值。

票数 3
EN

Stack Overflow用户

发布于 2013-09-21 12:49:28

由于您正在创建RIT.test()类的两个实例,所以它们不能相同。

考虑一下这个例子:

代码语言:javascript
复制
var class1 = function(value){
this.number value;
};
class1.prototype.getNumber = function(){
return this.number;
}

var number = new class1(5);
var number2 = new class1();//not value pass to the constructor here...
console.log(number.getNumber());//print 5 because the constructor is reciving a value
console.log(number2.getNumber())//null, since you have not give any value
//since you did not pass any value to the second instance to the constructor
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18932697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档