2016-12-01 42 views
1

所以我的目標是設置特殊屬性。以我的前三個console.log打印false(默認)的方式,但在代碼之後它將打印爲真。我嘗試了幾種方法(描述卡片中的方法將設置爲true,特殊爲真,並在此之後調用該方法。也只是改變card.special沒有工作。謝謝,如何更改將覆蓋對象值的原型值?可能嗎?

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); 
+0

你必須改變a9.special,a10.special和aa1.special個別 –

+0

這是點,我不想單獨使用它們。因爲我將有30-60個不同的變體。 – Koppany

+0

60變量...呃...爲什麼不是一個'卡'數組 - 然後你可以使用cards.forEach(...)來做事 –

回答

0

使用原型來存儲special

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指向原來的值上,但是當你改變它一些對象,一個人得到自己的副本。不再指着prototype.For例如:

現在假設您有您想要specialtrue

aal.special=true; 
console.log(aal.special);//true 

它不會影響別人,而它得到它自己獨立的副本

異常卡
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

您可以創建一個原型函數,它將控制檯記錄變量並更改其值。

card.prototype.logToggleSpecial = function() { 
    console.log(this.special); 
    if(!this.special) 
    this.special = !this.special; 
}; 

而不是調用控制檯日誌,只需撥打例如a9.logToggleSpecial()。已經嘗試過這一點,它的工作原理。

+0

也許我沒有足夠的具體。我其實不需要console.log他們。我只用console.log來查看我的想法是否有效。 我需要的是一個函數,它會影響原型,並在同一時間更改更多對象(a9,a10,aal)的一個屬性。 – Koppany

0

這是你想要的嗎?

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

你可以做somethinglike:

[a9,a10,aal].forEach(function(c) { c.special = true; }); 

甚至

var cards = { 
    a9: new card("nine",9,false), 
    a10: new card("Ten",9,false), 
    aal: new card("lower",9,false), 
}; 
console.log(cards.a9.special); 
console.log(cards.a10.special); 
console.log(cards.aal.special); 

Object.keys(cards).forEach(function(key) { cards[key].special = true; }); 

console.log(cards.a9.special); 
console.log(cards.a10.special); 
console.log(cards.aal.special); 

或者,如果你想獲得一點點花哨

var card = function() { 
    var cards = {}; 
    function card(name,value,special) { 
     this.name = name; 
     this.value = value; 
     this.special = special; 
     cards[name] = this; 
    } 
    card.setSpecial = function(b) { 
     Object.keys(cards).forEach(function(key) { 
      cards[key].special = b; 
     }); 
    }; 
    return card; 
}(); 

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

console.log(a9); 
console.log(a10); 
console.log(aal); 

card.setSpecial(true); 

console.log(a9); 
console.log(a10); 
console.log(aal);