2009-11-17 13 views

Respuesta

2

Hay una diferencia al menos si está asignando un objeto no primitivo a this.somevar o prototype.somevar.

Intente ejecutar esto:

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

que he intentado: agent_a.myArray = agent_b.myArray' agent2_a.myArray == agent2_b.myArray Por lo tanto, se muestra que en usando "esto! "cada objeto tiene su propia propiedad, función. Pero cuando uso un prototipo, es compartido. Lo cual puede ser un problema porque cuando cambio la matriz en un objeto, se cambia en todos los demás. :( – pencilCake

+0

yup, algo así;) – Lukman

1

No. 'prototipo' utilizado para implementar herencia en Javascript. Como la que:

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

código fuente y la información adicional se puede encontrar aquí: http://www.prototypejs.org/learn/class-inheritance

0

Funcionalmente, esto es lo mismo. Este último, sin embargo, enfatiza las similitudes entre los objetos Agent. Se puede ver en un vistazo que estos miembros tienen ese valor, mientras que en una función constructora más complicada, con muchos condicionales, es más difícil.

También permite que el tiempo de ejecución de javascript elija cómo se maneja la inicialización de miembros Agent. (hacer alguna precompilación, ...)

0

Suponiendo que esta función se va a utilizar como un constructor, la primera con establecer propiedades en la nueva instancia y la segunda en el prototipo. Si son independientes de la instancia, los dos fragmentos son equivalentes, pero si no lo son (como su nombre sugiere), entonces no lo son.

Cuestiones relacionadas