我看到人们在创建javascript对象时采取两种方法,他们有时会在主对象之外定义原型函数,有时他们会在内部执行它。在对象中定义原型函数具有使用私有变量和函数的优势,在外部定义它的优点是什么?在对象内部创建原型方法有什么缺点?
function something (params) {
this.name = params.name;
this.color = params.color;
_someprivatefunction = function() {};
something.prototype.publicFunction = function() {_someprivatefunction() };
}
至于反对:
function something (params) {
this.name = params.name;
this.color = params.color;
_someprivatefunction = function() {};
}
something.prototype.publicFunction = function() {//can't call the private function here };
编辑:在楼下的意见建议,这是第三个选项(但现在这个问题是私有函数斜面访问的任何私人的构造函数中的变量。)
(function() {
function something (params) {
this.name = params.name;
this.color = params.color;
}
_someprivatefunction = function() {};
something.prototype.publicFunction = function() {_someprivatefunction() };
}());
第一个看起来很奇怪的我。每次创建新实例时,都会在原型级别重新定义函数。这个函数只能访问最后创建的实例的闭包变量(不管你通过哪个实例调用它)。 我在某种程度上错了吗? – 2014-10-20 04:25:04
@SteveJorgensen是的,第一个选项可能是由某个人编写的不知道原型是什么,并重新定义它,每个实例的创建都是毫无意义的。如果你需要访问特定于实例的私有变量(特权函数)的功能,jsfriends解决方案(3rd)会更好。 – HMR 2014-10-20 07:13:14