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

时间:2009-11-16 19:47:38

标签: javascript

我来自传统的网络开发者背景,我无法声称对Javascript真正了解,但我正在尝试。

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

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

事实上,从我对上述书籍的阅读中,操作员不会做任何你不能做的另一种更简单的方法,并强迫你破解'this'变量。

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

4 个答案:

答案 0 :(得分:8)

首先,赞赏Javascript:The Good Parts这是一本关于该语言的好书。

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

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

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


var o = new MyClass();
o.sayHello();

你可以做到如下相同的事情:

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

var o = MyClass();
o.sayHello();

答案 1 :(得分:2)

你提到了Crockford的“JavaScript:The Good Parts。”

新事物是一个不好的部分。第114页。我不使用它。 (好吧,几乎没有。)

Crockford确实使用它(在他的beget()方法中)。

当你可以使用别的东西时,绝对不要使用它。使用对象和数组文字创建对象和数组。

答案 2 :(得分:2)

new运算符没有任何问题。对我来说,克罗克福德在这个问题上没有说服力。无论何时创建对象,您都可以在代码中的某处使用new,或者通过创建文字(例如{a: 1}等对象文字或[a, b, c]等数组文字)隐式使用它。

答案 3 :(得分:1)

这是关于prototype.js实现典型OO结构的一篇很棒的文章。如果没有“新”运算符,这是不可能的。

http://prototypejs.org/learn/class-inheritance

我强烈建议您阅读prototype.js源代码。 jQuery非常棒,并且非常受欢迎,但是在原型中完成的一些事情在其他地方没有比较**,特别是它们的类结构。

**有些人可能会争辩说原型所做的一些不应该在其他地方找到 - 这是一个不同的问题。但是,为了清楚地了解javascript的可能性,原型是要走的路,恕我直言。