首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改覆盖对象值的原型值?有可能吗?

如何更改覆盖对象值的原型值?有可能吗?
EN

Stack Overflow用户
提问于 2016-12-01 08:44:23
回答 4查看 114关注 0票数 1

因此,我的目标是设置特殊属性的。以一种方式,我的前三个console.log将打印false (默认情况下),但在代码之后,它将打印true。我尝试了几种方法(在中描述一个将this.special设置为true的方法,然后调用该方法。没有起作用)。而且,仅仅更改card.special也不起作用。谢谢,

代码语言:javascript
复制
    function card(name,value,special) {
 this.name = name,
 this.value = value,
 this.special = special
}
var a9 = new card("nine",9,false);
var a10 = new card("Ten",9,false);
var aal = new card("lower",9,false);

console.log(a9.special);
console.log(a10.special);
console.log(aal.special);
//code comes here
console.log(a9.special);
console.log(a10.special);
console.log(aal.special);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-12-01 11:54:36

使用原型存储special

代码语言:javascript
复制
function card(name,value,special) {
  this.name = name;
  this.value = value;
}

card.prototype.special= false;

var a9 = new card("nine",9);
var a10 = new card("Ten",9);
var aal = new card("lower",9);

console.log(a9.special);  //false
console.log(a10.special); //false
console.log(aal.special); //false

应该注意的是,只要您不修改对象上的special,它就会一直指向prototype中的原始值,但是当您在某个对象上更改它时,就会得到它自己的副本wiz。不再指向prototype.For示例:

假设现在您有一个异常卡,您希望special成为true

代码语言:javascript
复制
aal.special=true;
console.log(aal.special);//true

它不会影响其他人,而会得到它自己的独立拷贝

代码语言:javascript
复制
console.log(a9.special); //false
console.log(a10.special); //false

card.prototype.special= true; // make all true

console.log(a9.special); //true
console.log(a10.special); //true
票数 0
EN

Stack Overflow用户

发布于 2016-12-01 08:52:46

您可以创建一个原型函数,用于控制台记录变量并更改其值。

代码语言:javascript
复制
card.prototype.logToggleSpecial = function() {
  console.log(this.special);
  if(!this.special)
    this.special = !this.special;
};

与调用控制台日志不同,只需调用一个9.logTogglerSpecial()即可。已经试过了,而且成功了。

票数 0
EN

Stack Overflow用户

发布于 2016-12-01 09:05:05

这是你想要的吗?

代码语言:javascript
复制
var counter = 0;

function Card(name, value, special) {
    this.name = name,
    this.value = value,
    this.special = special;
}

defineSpecial(Card.prototype)

function defineSpecial(o) {
    var specialValue;
    Object.defineProperty(o, 'special', {
        get() {
            if (counter++ <= 2) {
                return false;
            }
            return specialValue;
        },
        set(val) {
            specialValue = val;
        }
    });
}

var a9 = new Card("nine",9,true);
var a10 = new Card("Ten",9,true);
var aal = new Card("lower",9,true);
console.log(a9.special);
console.log(a10.special);
console.log(aal.special);
//code comes here
console.log(a9.special);
console.log(a10.special);
console.log(aal.special);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40906054

复制
相关文章

相似问题

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