Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用constructor.prototype方法创建JavaScript库_Javascript - Fatal编程技术网

使用constructor.prototype方法创建JavaScript库

使用constructor.prototype方法创建JavaScript库,javascript,Javascript,我正在研究制作JavaScript库的系统。我见过大多数库使用的方法,例如。对我来说,这种方法使代码很难读懂 我想知道使用这种方法的优点是什么 使用基本.prototype系统创建库有哪些限制 例如,使用此模式创建库有什么错 function Library(){ this.property = 'val'; } Library.prototype.method = function(){ // a method } //and to use the library var li

我正在研究制作JavaScript库的系统。我见过大多数库使用的方法,例如。对我来说,这种方法使代码很难读懂

我想知道使用这种方法的优点是什么

使用基本
.prototype
系统创建库有哪些限制

例如,使用此模式创建库有什么错

function Library(){

  this.property = 'val';

}

Library.prototype.method = function(){
  // a method
}

//and to use the library
var lib = new Library();

立即执行的函数本质上只是一种避免使用私有变量污染全局范围的方法

您的方法很好,但是如果您希望您的库在内部引用不应属于公共API的私有数据,该怎么办?例如:

var Some_class = (function() {

    var foobar = 'foo'; //private; library can read it but public API can't

    var api = function() { /* constructor */ };
    api.prototype.method = function() { return foobar == 'foo' ? 1 : 0; }

    return api;

})();

var instance = new Some_class();
instance.method();

foobar
是一个私有(即内部)变量,供您的库使用,但不能通过其API公开访问。

与什么相比有什么优势?另外,你真的想创建一个单例模块,还是一个多次实例化的构造函数?IIFE创建了一个闭包作用域,所以对于你的模块来说,很多全局变量都不是全局变量(窗口的一部分)。请注意,在回答中,私有变量是共享的,所有实例都将使用相同的foo。这里有更多关于原型和构造函数的内容:所以使用这种方法。instance.foobar将无法访问?所以,使用IIFE(立即调用的函数表达式)的优点是防止暴露库的内部属性,从而使库不那么脆弱@这两个问题都是肯定的。在一个合适的OO环境中,比如PHP,你可以在变量上设置可见性标志;JS没有这方面的真正实现,所以这就是模拟私有属性的方式。这引出了另一个问题,这两种方法之间有没有性能差异@这取决于许多其他因素;整体代码的质量;其效率;它的足迹;从名义上说,没有,原则上差别可以忽略不计。@Utkanos在ES6/ES7中创建js库的最佳方法是什么