普通对象: 除了用 new Function()
创建的对象都是普通对象
函数对象: 用 new Function
创建的对象
注意: Object,Function 都是用 new Function 创建的,所以是函数对象
function Person(name, age) {
this.name = name
this.age = age
}
var p1 = new Person(‘hk’, 18)
var p2 = new Person(‘xiaoming’, 8)
上例中,p1
和p2
是Person
的实例,实例有一个constructor
属性,该属性是一个指针,指向Person,即有
p1.constructor === p2.constructor === Person
两个概念(构造函数,实例):
p1
和 p2
都是 构造函数 Person
的实例constructor
属性指向构造函数。每个函数对象都有一个prototype
属性,这个属性指向函数的原型对象
每个原型对象都有一个constructor
属性,这个属性指向prototype
属性所在的函数
p1.__proto__ === Person.prototype // true
要明确的真正重要的一点就是,这个连接存在于实例(p1)与构造函数(Person)的原型对象(Person.prototype)之间,而不是存在于实例(p1)与构造函数(Person)之间。
new 的作用
new Foo = function(Foo) {
var o = {}
o.__proto__ = Foo.prototype
Foo.call(o)
return o
}
新对象 obj 是使用 new 操作符后跟一个构造函数来创建的。构造函数(Object)本身就是一个函数(就是上面说的函数对象),它和上面的构造函数 Person 差不多。只不过该函数是出于创建新对象的目的而定义的。所以不要被 Object 吓倒。
同理,可以创建对象的构造器不仅仅有 Object,也可以是 Array,Date,Function等。 所以我们也可以构造函数来创建 Array、 Date、Function