/* * 原型是类中的内容,原型链是对象中的内容 * prototype 原型 * __proto__ 原型链 * 内容一样 * * 如果修改类下原型属性(prototype)或者修改对象下原型链属性(__proto__) * 都会引起继承或根据该类创建对象下所有原型属性值改变。 * * */
/* * 类使用函数来描述,类名必须首字母大写,驼峰命名法则 * Box.prototype 原型 * 用来定义类名的函数,这种函数叫做构造函数,比如下面的Box就构造函数 * 类被实例化后形成对象,对象就具备两种属性和方法, * 一种是对象属性,这种属性写在构造函数中 * 一种是原型属性,这种属性写在原型中 * 对象属性可以直接用for in遍历,但是原型属性不能遍历 * 如果原型属性和对象属性都有设置,并且设置相同时, * 那么在构造函数中的这个对象属性和原型属性并列存在,调用时实际是调用对象属性 * 原型属性不改变,只有通过原型链来改变原型属性(this.__proto__.属性) * * * * */ function Box() { this.a=3; this.b=4; } Box.prototype={ c:5, d:function () { console.log(this.a,this.b,this.c,this.d) } }; Box.prototype.e=function () { }; var Circle=(function () { function Circle() { this.a=6; this.b=7; } Circle.prototype={ c:8, d:function () { console.log(this.a,this.b,this.c) } }; return Circle })(); (function (win) { function Circle1(w,h) { this.a=w; this.b=h } Circle1.prototype={ c:11, d:function () { console.log(this.a,this.__proto__.a) } }; win.Circle1=Circle1 })(window);