以下两个代码之间是否存在差异,我认为不是。
function Agent(bIsSecret)
{
if(bIsSecret)
this.isSecret=true;
this.isActive = true;
this.isMale = false;
}
和
function Agent(bIsSecret)
{
if(bIsSecret)
this.isSecret=true;
}
Agent.prototype.isActive = true;
Agent.prototype.isMale = true;
答案 0 :(得分:2)
至少如果要将非基本对象分配给this.somevar
或prototype.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');
答案 1 :(得分:1)
没有。 'prototype'用于在Javascript中实现继承。如:
/** 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
答案 2 :(得分:0)
从功能上讲,这是一样的。然而,后者强调Agent
个对象之间的相似性。你可以瞥见这些成员具有这个值,而在一个更复杂的构造函数中,有很多条件,它就更难了。
它还允许javascript运行时选择它如何处理Agent
成员初始化。 (做一些预编译,......)
答案 3 :(得分:0)
假设此函数将用作构造函数,第一个在新实例上设置属性,第二个在原型上。如果它们独立于实例,则两个片段是等效的,但如果它们不是(顾名思义),则它们不是。