new是构建一个空的对象后将this指向这个空对象  不new的话this会指向window  具体看上下文

解决方案 »

  1.   

    是当时JavaScript的创始人参考C的语法而这么设计的。
      

  2.   

    因为new是一个操作符,跟-,+是一样的,是js基础语法的一部分,不同只是他是由字母组成的。
    new是有前提的,只有js的函数对象才可以new,这就不展开了,很多细节。
    然后new之后会返回一个实例化的对象,这个new的过程是js面向对象实现的具象化操作,如果不用new,那就不能实现面向对象化编程,不能代码尽可能的复用。
    如果按着你的说法,或1楼的代码化实现是这样的,sayName是没办法调用的。var Dog = function(name, age){
        this.name = name;
        this.age = age;
    }
    Dog.prototype = {
        constructor : Dog,
        sayName : function(){
            console.log(this.name);
        }
    }Dog('jikey', 4);
    console.log(this.name == window.name); // true
    console.log(this.name); // jikey
    console.log(this.age); // 4
    然后用了new之后的情况,根据这个模板可以复制很多个dog2,dog3出来。var Dog = function(name, age){
        this.name = name;
        this.age = age;
    }
    Dog.prototype = {
        constructor : Dog,
        sayName : function(){
            console.log(this.name);
        }
    }
    var dog2 = new Dog('tang', 5);
    dog2.sayName();var dog3 = new Dog('csdn', 10);
    dog3.sayName();