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原型。

posted @ 2017-07-06 14:58  IdealJoe  阅读(141)  评论(0编辑  收藏  举报