JavaScript构造函数学习笔记(ife2015spring学习心得)
本文为对此文章内容的思考和总结:http://www.jb51.net/article/25027.htm
实际上在前面的原型中已经介绍过constructor了,下面进行详细的讨论。
function Person(){} var p = new Person(); alert(p.constructor);//Person alert(Person.prototype.constructor);//Person alert(Person.prototype.hasOwnProperty('constructor'));//true alert(Person.prototype.isPrototypeOf(p));//true alert(Object.prototype.isPrototypeOf(p));//true alert(Person.prototype == Object.prototype);//false
可以看出constructor是prototype的属性。
如果
function Animal(){} function Person(){} Person.prototype = new Animal(); var person = new Person(); alert(person.constructor); //Animal
这个时候明明是作为Person原型的实例啊?但最后表明实例的构造函数却为Animal.原因就在于
Person.prototype = new Animal();
这段代码,表明Person的原型变成了Aniaml,后续代码中实例引用Person的原型属性,自然是指向Animal,此时输出构造函数则为Animal.
function Person(){}
Person;函数本身.
person.constructor;//function Function {native code}说白了就是函数的构造函数
Person.prototype.constructor;函数本身
Person===Person.prototype.constructor;//函数原型的构造函数为函数自身
那么问题来了:
function Animal(){} function Person(){} var person = new Person(); alert(person.constructor); //Person
person.constructor的值为什么为Person?
实际上person实例对应的便是Person的原型属性,Person的原型以原型属性的形式赋给了person。所以person的构造函数为Person原型。