这是创建一个原型为null的空对象
类的属性除非是显式定义在其本身上(即this对象上),否则都定义在原型上。eat,sayName这两个方法是实例都可以调用,区别就是sayName在实例的prototype上
var person1=createPerson("Nicholas",29,"software Engineer")var person1=new Person("Nicholas",29,"software Engineer")
区别在这两句话中,你可以看到第一个语句里面没有new关键字,直接执行一个函数;而第二个表达式中有new,也就是说是新实例化了一个对象。
JS中关于this的定义是:函数直接在全局中执行,那么this指向的是全局对象window。也就是说你在createPerson中new了一个o,但是你再执行this.name=name那么就等于是执行了window.name=name,o对象本身不会有任何印象,最后你return了o也只是得到了一个空对象。
而JS中执行了new之后,等于通过构造函数创建了一个新对象,那么这个构造函数中的this也就指向了这个新实例化的对象,此时this.name=name修改了新对象person1中的name值。
关于对象实例化的知识和this指向的问题题主还多翻一翻博客园的文章,讲的很详细,从长久发展来看先打好基础对你以后的道路更有好处。