我正在尝试真正扎实地掌握 JavaScript,但我遇到了一个对我来说很大的问题。我习惯于使用 C 语言工作,我发现的障碍之一是处理 JavaScript 的原型功能以及何时声明函数,因为它与执行顺序有关。
例如,采用以下代码:
var construct = new Constructor(); //I can do this even if its above the declaration of the object.
construct.MyPrivilagedFunction(); //Can do this here too, even though it's above the function declaration.
construct.MyPublicFunction(); //Can't do this because it is above the function declaration.
function Constructor() {
//Private member
var m_Ding = "Ding!";
//Accessible publicly and has access to private member.
this.MyPrivilagedFunction = function() {
console.log(m_Ding);
}
}
Constuctor.prototype.MyPublicFunction = function() {
//Doesn't have access to private members. This doesn't work.
console.log(m_Ding);
}
我知道原型设计提供了更好的性能,因为函数的副本不会存储在对象的每个实例上,而是每个实例都引用同一个函数(我猜每个新实例都可以被认为是一个全新的对象类型?) . 但是,原型设计不允许我在定义函数之前使用它。此外,原型函数无法访问对象的私有成员。
这只是一个真正的问题,因为我正在处理一个项目,其中两个对象需要使用彼此的功能。如果我在代码的前面放置一个对象,它将无法访问第二个对象,因为原型函数遵循执行顺序(从上到下)。
旁注:我也知道我的对象可能应该是一个对象字面量(如 object={property:value}),但我仍在努力掌握范围和原型设计以尝试处理它现在。