Javascript Object-Oriented-Programming

Javascript Object-Oriented-Programming

本文关键字:Object-Oriented-Programming Javascript      更新时间:2023-09-26

我在JS中找到了一个模块模式:

<script>
var MODULENAME = (function(my, $) {
    my.publicVar = "5";
    my.publicFn = function() {};
    return my;
}(MODULENAME || {}, jQuery));
</script>

但是我无法执行实例化。模块模式是否允许这样做?

Instantiantion基本上意味着您将使用new运行函数

所以也许你正在寻找这个?

var Some = function (param) {
  var somePrivateVar = 'private';
  this.somePublicVar = 'public';
  this.method = function () {
    return param;
  };
};
var some = new Some('abla');
console.log(some.method());
// some.somePrivateVar === undefined
// some.somePublicVar === 'public'

在您的情况下,MODULENAME是一个具有publicVarpublicFn的对象(对象,而不是函数(。它并不意味着以您不会调用new jQuery()的方式进行实例化。

模块对象可以包含任何内容。也许您正在寻找在其中包含一个构造函数:

var MODULENAME = (function(my, $) {
    var privateVar = 10;
    my.SomeConstructor = function() {
        this.publicVar = 5;
    }
    my.SomeConstructor.prototype.someMethod = function() {};
    my.SomeConstructor.prototype.getPrivate = function() { return 10; };
    return my;
}(MODULENAME || {}, jQuery));
var instance = new MODULENAME.SomeConstructor();
instance.publicVar;    // 5
instance.privateVar;   // undefined
instance.getPrivate(); // 10

你也可以用原型继承来做到这一点:

var MyClass = function(name)
{
//sharing name within the whole class
this.name = name;
}
MyClass.prototype.getName = function(){
return this.name;//now name is visible to getName method too
}
MyClass.StaticMethod = function()
{
console.log("Im Static");
// and since is not in prototype chain, this.name is not visible
}
    var myclass = new MyClass("Carlos");
    console.log(myclass.getName())//print "Carlos"
MyClass.StaticMethod()// print "Im Static"
myclass.StaticMethod() // error

Se 所有这篇文章