2009-11-17 58 views

回答

2

至少如果您將一個非原始對象指定爲this.somevarprototype.somevar,則存在差異。

嘗試運行此:

function Agent(bIsSecret) 
{ 
    if(bIsSecret) 
     this.isSecret=true; 

    this.isActive = true; 
    this.isMale = false; 
    this.myArray = new Array(1,2,3); 
} 

function Agent2(bIsSecret) 
{ 
    if(bIsSecret) 
     this.isSecret = true; 
} 

Agent2.prototype.isActive = true;  
Agent2.prototype.isMale = true; 
Agent2.prototype.myArray = new Array(1,2,3); 

var agent_a = new Agent(); 
var agent_b = new Agent(); 

var agent2_a = new Agent2(); 
var agent2_b = new Agent2(); 

if (agent_a.myArray == agent_b.myArray) 
    alert('agent_a.myArray == agent_b.myArray'); 
else 
    alert('agent_a.myArray != agent_b.myArray'); 

if (agent2_a.myArray == agent2_b.myArray) 
    alert('agent2_a.myArray == agent2_b.myArray'); 
else 
    alert('agent2_a.myArray != agent2_b.myArray'); 
+0

我曾嘗試: agent_a.myArray = agent_b.myArray」 agent2_a.myArray == agent2_b.myArray 因此,這表明,在使用「這個! 「每個對象都有自己的屬性,功能。但是當我使用原型時,它是共享的。這可能是一個問題,因爲當我更改一個對象上的數組時,它會在其他所有對象上進行更改。 :( – pencilCake

+0

是的,類似的東西;) – Lukman

1

號 '原型'。如題:

/** obsolete syntax **/ 

var Person = Class.create(); 
Person.prototype = { 
    initialize: function(name) { 
    this.name = name; 
    }, 
    say: function(message) { 
    return this.name + ': ' + message; 
    } 
}; 

var guy = new Person('Miro'); 
guy.say('hi'); 
// -> "Miro: hi" 

var Pirate = Class.create(); 
// inherit from Person class: 
Pirate.prototype = Object.extend(new Person(), { 
    // redefine the speak method 
    say: function(message) { 
    return this.name + ': ' + message + ', yarr!'; 
    } 
}); 

var john = new Pirate('Long John'); 
john.say('ahoy matey'); 
// -> "Long John: ahoy matey, yarr!" 

的源代碼和其他信息,你可以在這裏找到:http://www.prototypejs.org/learn/class-inheritance

0

功能,這是一樣的。然而,後者強調Agent對象之間的相似性。你可以看到這些成員具有這種價值,而在一個更復雜的構造函數中,有很多條件,這很難。

它還允許javascript運行時選擇如何處理Agent成員初始化。 (做一些預編譯,...)

0

假設這個函數被用作構造函數,第一個在新實例上有set屬性,在prototype上有第二個屬性。如果它們與實例無關,則兩個片段是等效的,但如果它們不是(如它們的名稱所示),則它們不是。

相關問題