JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

JS new操作符

有面向对象编程的基础有时会成为一种负担,比如看到 new 的时候,Java 程序员可能会认为这将会调用一个类的构造器构造一个新的对象出来,我们来看一个例子:
function Shape(type){
    this.type = type || "rect";
    this.calc = function(){
        return "calc, "+this.type;
    }
}
var triangle = new Shape("triangle");
print(triangle.calc());
var circle = new Shape("circle");
print(circle.calc());

运行结果如下:
calc, triangle
calc, circle

Java 程序员可能会觉得 Shape 就是一个类,然后 triangle,circle 即是 Shape 对应的具体对象,而其实 JavaScript 并非如此工作的,罪魁祸首即为此 new 操作符。在 JavaScript中,通过 new 操作符来作用与一个函数,实质上会发生这样的动作:首先,创建一个空对象,然后用函数的 apply 方法,将这个空对象传入作为 apply 的第一个参数,及上下文参数。这样函数内部的 this 将会被这个空的对象所替代:
    var triangle = new Shape("triangle");
    //上一句相当于下面的代码
    var triangle = {};
    Shape.apply(triangle, ["triangle"]);