是关于JavaScript的原型封闭好的做法方面的一件好事

我试图学习几个星期的JavaScript(node.js)。 我有一些.NET的知识,结果证明这是一件坏事。 我对JavaScript的总体理解是:

  • 一切都应该放在功能上,我们可以把它们看作是类,但不要这样称呼它们
  • 函数(方法)应该总是放在一个原型中,原型对于我们的“类”的每个实例都是一个共享函数,就是说 - 为所有这些实例安装一次
  • 关闭是一件好事,他们隐藏私人方法,他们似乎也持续到记忆中,直到不知名的时刻,持有增值税
  • 这是为了让你了解我对JS的最新理解,但实际问题如下:我有一些代码,希望在原型中有一个闭包,因此 - 写在我想要使用javascript的弱邻域中。 所以,

  • 是javascript原型封闭的好东西
    好的做法,如果是的话,这个代码就是很好的例子吗?
  • 为什么我要在myclass构造函数中“返回”?
  • 和finaly - 代码no1和no2的部分是相同的东西?
  • function createFunctionWithClosure() { // number, and a gensym method that produces unique strings
        var prefix = '';
        var seq = 0;
        return {
          set_prefix(p) {
              prefix = String(p);
            },
            set_seq: function(s) {
              seq = s;
            },
            get_unique: function() {
              var result = prefix + seq;
              seq += 1;
              return result;
            }
        };
      }
    
    //example no1
    function myclass_t() {
      //why some examples have
      return this
    }
    myclass_t.prototype = createFunctionWithClosure();
    var myclass = new myclass_t()
    myclass.set_prefix('no1--->')
    myclass.set_seq(100)
    console.log(myclass.get_unique()) //100
    console.log(myclass.get_unique()) //101...
    
    //example no2
    var myvar = createFunctionWithClosure();
    myvar.set_prefix('no2-->')
    myvar.set_seq(1000);
    myvar.get_unique()
    myvar.get_unique()
    console.log(myvar.get_unique()) //1002
    console.log(myvar.get_unique()) //1003

    这不是对你的问题的直接回答,但我认为你实际需要的是了解原型继承如何在JavaScript中工作的基础知识。

    这是一个很好的视频和一个现场游乐场,Mozilla文档也是一个很好的信息来源。

    一旦你理解了这些东西,你可能会觉得这是一种“骇客式”的做事方式,你是否需要接受这一点,或者转向ES6或类似JavaScript的JavaScript编译语言,请参阅此问题以获取更多信息。这个。


    #1是javascript原型封闭在良好的实践方面是好事,如果是的话,这个代码是不是很好的例子?

    闭包是一个函数,它的作用域是引用其他作用域的成员:

    // "x" is being referenced on the inline function's scope
    var x = "hello world";
    var func = function() {
       console.log(x);
    };
    

    不管是不是一个好主意,它都将取决于项目的要求......我想说的是,我很少会选择这样的路线。

    #2为什么我要在myclass构造函数中“返回”?

    由于一些角落案件。 如果你正在开发一个流畅的接口,你可能想回到this ,你会怎么做,如果整体功能没有被从那里被宣布为对象调用。

    例如:

    var obj = {
        doStuff: function() {
           return this;
        }
    
        doStuff2: function() {
           return this;
        }
    };
    
    // This is a fluent interface
    obj.doStuff().doStuff2();
    

    在构造函数中返回this函数是没有用的,除非你想把整个构造函数作为常规函数调用:

    var func = function() {
        return this;
    };
    
    // The whole "return this" won't have any effect
    // on this case
    var instance = new func();
    
    // With Function.prototype.call, the first parameter
    // defines "this" within the scope of the called function.
    // That is, it'll return the object with a text property...
    var result = func.call({ text: "hello world" });
    

    #3和finaly - 是代码no1和no2的部分是同一件事情?

    没有。

    您的第一个示例显示了一个构造函数,其中的原型是工厂函数返回的对象。

    另一方面,第二个示例使用整个工厂函数将其返回的对象设置为整个变量。

    链接地址: http://www.djcxy.com/p/60775.html

    上一篇: is javascript prototype with closure a good thing in terms of good practice

    下一篇: Using a prototype pattern in a closure