2009-11-17 8 views

Antwort

2

Es gibt zumindest einen Unterschied, wenn Sie this.somevar oder prototype.somevar ein nicht primitives Objekt zuweisen.

Versuchen Sie, diese:

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

ich versucht habe: agent_a.myArray = agent_b.myArray‘ agent2_a.myArray == agent2_b.myArray So zeigt sich, dass bei durch„diese mit! "Jedes Objekt hat seine eigene Eigenschaft, Funktion. Aber wenn ich einen Prototyp verwende, wird er geteilt. Das kann ein Problem sein, denn wenn ich das Array für ein Objekt ändere, wird es für alle anderen geändert. :( – pencilCake

+0

yup, so etwas;) – Lukman

1

Nr 'Prototyp' verwendet für die Vererbung in Javascript zu implementieren. Wie das:

/** 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!" 

Code Quelle und weitere Informationen finden Sie hier: http://www.prototypejs.org/learn/class-inheritance

0

Funktionell ist dies nichts weiter. Letzteres betont jedoch Ähnlichkeiten zwischen Agent Objekten. Sie können auf einen Blick sehen, dass diese Mitglieder diesen Wert haben, während es in einer komplizierteren Konstruktorfunktion mit vielen Bedingungen schwieriger ist.

Es ermöglicht auch die Javascript-Laufzeit zu wählen, wie es Agent Elementinitialisierungen behandelt. (Führen Sie eine Vorkompilierung durch, ...)

0

Angenommen, diese Funktion soll als Konstruktor verwendet werden, der erste mit festgelegten Eigenschaften für die neue Instanz und der zweite mit dem Prototyp. Wenn sie unabhängig von der Instanz sind, sind die beiden Snippets gleichwertig, aber wenn dies nicht der Fall ist (wie der Name vermuten lässt), dann nicht.