在JavaScript 的世界中,万物皆对象,但对象之间也是有区别的,分为普通对象和函数对象。
function f1(){} var f2 = function(){} var f3 = new Function() var o1 = {} var o2 =new Object() var o3 = new f1() console.log(typeof f1) //function console.log(typeof f2) //function console.log(typeof f3) //function console.log(typeof o1) //object console.log(typeof o2) //object console.log(typeof o3) //object //Object、Function是JS自带的函数对象 console.log(typeof Object) //function console.log(typeof Function) //function
function Person(name, age) {
this.name = name
this.age = age
this.say = function() { alert(this.name) }
}
var person1 = new Person(‘sun‘, 20)
var person2 = new Person(‘zhang‘, 23)
上面的例子中 person1 和 person2 都是 Person 的实例。这两个实例都有一个 constructor
属性,该属性(是一个指针)指向 Person。 即:
console.log(person1.constructor === Person) //true
console.log(person2.constructor === Person) //true
结论:实例的构造函数属性(constructor)指向构造函数。
在 JavaScript 中,每当定义一个对象(函数也是对象)的时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype
属性,这个属性指向函数的原型对象。
function Person() {}
Person.prototype.name = ‘zhang‘
Person.prototype.age = 20
Person.prototype.say = function() {
alert(this.name)
}
var person1 = new Person()
person1.say() // zhang
var person2 = new Person()
person2.say() // zhang
console.log(person1.say === person2.say) //true
原型对象,它就是一个普通对象。在默认情况下,所有的原型对象都会自动获得一个 constructor
属性,这个属性(是一个指针)指向 prototype
属性所在的函数(Person)。
原型对象其实就是普通对象(但 Function.prototype 除外,它是函数对象,并且它很特殊,它没有prototype属性(前面说道函数对象都有prototype属性))。
原文:https://www.cnblogs.com/sunyudi/p/14178180.html