文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>浅析javascript中constructor与prototype的关系

浅析javascript中constructor与prototype的关系

时间:2010-03-10  来源:yur505

  1、首先prototype是函数的属性,可以让函数定义成为类,其类型变量具有prototype中所有属性(可能是函数直接引用,非函数成员拷贝),所以prototype其实是一个可供继承(变量也拥有)的属性集。
2、关于constructor,需要先了解一下函数定义(构造函数,即类)时的一些特殊处理:   当声明自定义类型MyClass(定义函数)时,它的prototype属性即为Function.prototype的部分引用,但要注意prototype.constructor成员会修改成函数自身名称,而当声明该类型变量p、q时,则会直接继承MyClass.prototype中的成员属性。
3、根据上面描述可知,对MyClass.prototype赋值时会导致它指向了Object.prototype,特别是MyClass.prototype.constructor被覆盖成了Object构造函数,因此变量q的constructor属性即指向了Object函数。


 

var console = {};
console.log = alert;
function MyClass(name) {
    this.name = name;
};
MyClass.prototype.getName = function() {
    return this.name;
};
var p = new MyClass("ZhangSan");
console.log(p.constructor); // MyClass

console.log(p.constructor.constructor); // Function

console.log(MyClass.constructor); // Function,此处等价于上面一种情况,因为p.constructor === Persion

console.log(MyClass.prototype.constructor); // MyClass

console.log(p.constructor.prototype.constructor); // MyClass,此处与上面等价,同样因为p.constructor === Persion

//MyClass.prototype = {} 等价于 MyClass.prototype = new Object()
MyClass.prototype = {
    getName: function() {
        return this.name;
    }
};
var q = new MyClass("ZhangSan");
console.log(q.constructor); // Object

console.log(MyClass.constructor); // Function

console.log(MyClass.prototype.constructor); // Object,对prototype赋值导致prototype中的constructor成员被Object中的同名属性覆盖

console.log(q.constructor.prototype.constructor);


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载