我来自传统的网络开发者背景,我无法声称对Javascript真正了解,但我正在尝试。
我目前对JQuery的理解是一个相当新手的理解,对闭包的理解稍微好一些,而且我已经阅读过,并且觉得我对Douglas Crockford的“Javascript:The Good Parts”非常清楚。
我最近一直在构建一些相当javascript密集的页面,我对结果非常满意。需要注意的一件事是,我设法完成了几乎没有全局函数的整个事情,甚至没有使用new运算符。
事实上,从我对上述书籍的阅读中,操作员不会做任何你不能做的另一种更简单的方法,并强迫你破解'this'变量。
那么我缺少什么?新操作符实际上是出于某种目的还是仅仅是一种让OO程序员在功能语言中感到舒适的技巧?我会更好地从我的JS词汇中完全打击它吗?
答案 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的可能性,原型是要走的路,恕我直言。