Javascript的新运营商做了什么,但让生活变得困难吗?

Geo*_*uer 15 javascript

我来自传统的Web开发人员背景,在这里我无法宣称对Javascript有任何了解,但我正在努力.

我目前对JQuery的理解是一个相当新手的理解,对闭包的理解稍微好一些,而且我已经阅读过了,并且觉得我对Douglas Crockford的"Javascript:The Good Parts"非常清楚.

我最近一直在构建一些相当javascript密集的页面,我对结果非常满意.需要注意的一点是,我设法完成了几乎没有全局函数的整个事情,甚至没有使用new运算符.

事实上,从我对上述书籍的阅读中,操作员什么也做不了你不能做的另一种更简单的方法,并迫使你破解'this'变量.

那么有什么我想念的吗?新操作符实际上是出于某种目的还是仅仅是一种让OO程序员在功能语言中感到舒适的技巧?我会更好地从我的JS词汇中完全打击它吗?

Bry*_*yle 8

首先,阅读Javascript:The Good Parts这是一本关于语言的好书.

要回答您的问题,new如果您想使用原型继承,则需要操作员.没有其他方法可以让对象"继承"另一个对象.话虽这么说,您可以将属性从一个对象复制到另一个对象,在某些情况下可以消除对运算符的需求.

例如,经典方法将使用以下内容:

function MyClass() {};
MyClass.prototype.sayHello = function() {
   alert('hello');
};


var o = new MyClass();
o.sayHello();
Run Code Online (Sandbox Code Playgroud)

你可以实现如下相同的事情:

function MyClass() {
   return { 
      sayHello: function() {
         alert('hello');
      }
   };
}

var o = MyClass();
o.sayHello();
Run Code Online (Sandbox Code Playgroud)

  • 弗兰克:实际上,在对象上分配prototype属性不会使对象继承该原型.你是正确的o.hasOwnProperty('prototype')确实会返回true. (2认同)
  • 虽然这在某种程度上是正确的,但说这两个陈述相同是不正确的.存在巨大的记忆含义.如果每个创建1000个,则第一个版本将共享对基础原型函数的引用,而第二个版本将为每个实例创建一个新引用.如果你创造了很多动态物体,你就会陷入伤害的世界.以下是一个很好的主题:http://groups.google.com/group/rubyonrails-spinoffs/browse_thread/thread/58acd82eeb5afcc9/ede972acab3df08d?hl=en&lnk=gst&q=when+claiming+wrong#ede972acab3df08d (2认同)