var Obj = new Object();
Obj["Age"] = 32;
Obj.Name = "Hello";
alert("Age: "+ Obj.Age + "Name:"+ Obj["Name"]);
所以我们可以看出实际上在javascript中就每一个对象类似于Dictonary。对该对象的属性进行访问。也就是从该Dictonary中读取也就是说Obj.Age实际上也就是同Obj["Age"]是同样意义的。
然后我们需要理解借用函数这一个概念。还是先看看代码
function Speak()
...{
alert("Age: "+ this.Age+ "Name:"+ this.Name);
}


var Obj = new Object();
Obj.Age = 32;
Obj.Name = "Hello";
Speak.call(Obj);
function Speak()
...{
alert("Age: "+ this.Age+ "Name:"+ this.Name);
}


var Obj = new Object();
Obj.Age = 32;
Obj.Say = Speak;
Obj.Say();这个时候Speak函数中的this也会变成Obj这同Seapk.call(Obj)是等价的
了解了这两点后。我们就可以看看new之后发生了一些什么.
function ClassA()
...{
this.Name = "Class A";
}
ClassA.prototype.Speak = function()
...{
alert(this.Name);
}
function SimulateNew(constructor)
...{
var obj = new Object();
for(var s in constructor.prototype)//1
...{
obj[s] = constructor.prototype[s];
}
constructor.call(obj);//2
//1,2的次序在某些情况下又影响.new应该是按照先1后2来进行的
return obj;
}
var a = new ClassA();
a.Speak();
var anotherA = SimulateNew(ClassA);
anotherA.Speak();
function NoramlFunction()
...{
//do anything...
}
alert(NormalFunction.prototype);
function NoramlFunction()
...{
//do anything...
}
//NormalFunction.prototype = new Object; 这一步在生成function对象的时候已经由后台自动实现了
alert(NormalFunction.prototype);
理解了这一点后.我们可以很好的理解javascript的继承等等概念
关于javascript的继承有兴趣的可以看一下的帖子:
http://birdshome.cnblogs.com/archive/2005/01/28/95933.html
关于javascript面向对象更详细的解释
http://mckoss.com/jscript/object.htm
注:第二个链接的私有成员的成立本人持保留意见.这个是一个很tricky的办法.而且在prototype定义的函数中无法访问私有成员而且私有成员不能通过this访问.这违背了private的本质
所以应该按照Professional.JavaScript.For.Web.Developers一书88页(英文原版Apr.2005)中说的使用命名来区分用途