我已经明白构造函数可以实例化以在javascript中创建新对象,它具有自己的_proto_属性,并且还将属性'prototype'赋予构造函数。
function MyController() {
var controllerName = 'initialcontroller';
function init() {
console.log(controllerName);
}
this.init = init;
}
这里可以像这样调用init:
var mycontroller = new MyController();
mycontroller.init();
假设我只是只实例化一次并且再也没有实例化,如果我不打算使用MyController.prototype提供的所有原型属性,这不是一种矫枉过正吗?
问题:相反,我是否可以使用揭示模块模式来编码?
var myController = function() {
var controllerName = 'initialcontroller';
function init() {
console.log(controllerName);
}
return {
init : init
}
}();
这里可以像这样调用init:
myController.init();
在这种情况下,如果我尝试访问myController中不存在的任何属性,javascript引擎将不会尝试查找该属性是否存在于原型链中的任何位置,从而节省了我的时间。
或者是否有实例化我忽略的功能的其他优点?
答案 0 :(得分:2)
如果你只是想要一个具有某些方法和其他属性的“单身”对象,你可以使用一个对象文字来简化更多的事情:
var myController = {
init: function (foo) {
// do something with foo or whatever
}
}
myController.init("bar");
或者 - 如果您需要某些“私人”内部状态,请使用常规显示模块模式:
var myController = (function () {
var internal = "i am private";
return {
init: function () {
// blah blah
}
};
}());
myController.init();
关于原型查找时间:是的,理论上,当您尝试访问不存在的属性时,查找会遍历原型链。从理论上讲,对于具有“无”特定构造函数的普通ol'Object
实例,这可能会更快微弱。实际上,这种性能影响应该是微不足道的。除非您真的需要,否则不要尝试优化。 :)