相关疑难解决方法(0)

JavaScript:好的部分 - 如何不使用`new`

Crockford的书,JavaScript:The Good Parts,(第114页)说构造函数应始终给出带有首字母大写字母(即Point)的名称,并且带有首字母大写字母的函数名称只能与构造函数一起使用(其他一切都应该是lowerCase).

这个约定有助于我们避免忘记使用new构造函数的运算符.

他接着说,"更好的应对策略是根本不使用new."

我的问题是,我们如何编程JavaScript而不使用它new

  • 我们可以避免new Object()new Array()文字{}[].
  • 我们能够避免new Number(),new Boolean()以及new String()0,true''.
  • 我们可以避免new RegExp()类似的事情/pattern/.

我们如何避免new Date()

而且,最重要的是,我们如何避免使用new自己的自定义对象?

javascript oop constructor new-operator

57
推荐指数
5
解决办法
2万
查看次数

OO Javascript构造函数模式:新古典主义与原型

我看了道格拉斯克罗克福德关于Javascript好的部分的演讲,我的眼睛被打开了.有一次,他说,"Javascript是唯一一种优秀的程序员相信他们可以有效地使用它而不需要学习它的语言." 然后我意识到,我就是那个人.

在那次演讲中,他做了一些声明,对我而言,非常令人惊讶和富有洞察力.例如,JavaScript是地球上最重要的编程语言.或者它是这个星球上最流行的语言.并且,它以许多严肃的方式被打破.

对我来说,他最令人惊讶的声明是"新危险".他不再使用它了.他也this没用.

他为Javascript中的构造函数提供了一个有趣的模式,一个允许私有和公共成员变量的模式,并且既不依赖new也不依赖this.它看起来像这样:

// neo-classical constructor
var container =  function(initialParam) {
    var instance = {}; // empty object 

    // private members
    var privateField_Value = 0;
    var privateField_Name = "default";

    var privateMethod_M1 = function (a,b,c) {
        // arbitrary
    }; 

    // initialParam is optional
    if (typeof initialParam !== "undefined") {
        privateField_Name= initialParam;
    }

    // public members
    instance.publicMethod = function(a, b, c) {
        // because of closures,
        // can call private methods …
Run Code Online (Sandbox Code Playgroud)

javascript oop constructor class-design

43
推荐指数
4
解决办法
1万
查看次数

JavaScript:如何在不使用new关键字的情况下创建类的新实例?

我认为以下代码将使问题清楚.

// My class
var Class = function() { console.log("Constructor"); };
Class.prototype = { method: function() { console.log("Method");} }

// Creating an instance with new
var object1 = new Class();
object1.method();
console.log("New returned", object1);

// How to write a factory which can't use the new keyword?
function factory(clazz) {
    // Assume this function can't see "Class", but only sees its parameter "clazz".
    return clazz.call(); // Calls the constructor, but no new object is created
    return clazz.new();  // Doesn't work because …
Run Code Online (Sandbox Code Playgroud)

javascript oop constructor instance

22
推荐指数
3
解决办法
5万
查看次数

Javascript自动getter/setters(John Resig Book)

我正在阅读John Resig的" Pro Javascript Techniques ",我对一个例子感到困惑.这是代码:

// Create a new user object that accepts an object of properties
function User( properties ) {
  // Iterate through the properties of the object, and make sure
  // that it's properly scoped (as discussed previously)
  for ( var i in properties ) { (function(){
  // Create a new getter for the property
  this[ "get" + i ] = function() {
    return properties[i];
  };
  // Create a new setter for the property
  this[ "set" …
Run Code Online (Sandbox Code Playgroud)

javascript metaprogramming

18
推荐指数
2
解决办法
1万
查看次数

在构造函数中包装新的好坏?

我观看了John Resig 在JavaScript库设计演示中的最佳实践 ; 一张幻灯片建议"调整"对象构造函数,以便实例化它自己.

function jQuery(str, con) {
    if (window === this) {
        return new jQuery(str, con);
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

new jQuery("#foo")随之而来的,变成了jQuery("#foo").

我认为这很有趣,但我没有在我自己的代码中编写类似的构造函数.

过了一会儿,我在这里看了一篇文章.(对不起,我不记得哪个或者我提供了一个链接.我会更新问题,如果我能再次找到它.)其中一条评论说这样做是不好的做法躲避new程序员,但没有详细说明.

我的问题是,上述一般认为好,坏,或无动于衷,为什么?

javascript

6
推荐指数
1
解决办法
333
查看次数