构造函数为:
function Person(name,age,gender){ this.name=name; this.age =age; this.gender=gender; this.text=function (){ document.write("这是一个函数"); } }构造函数创建对象:
var per=new Person("孙悟空",18,"男"); var per2=new Person("猪八戒",17,"男");注:使用同一构造函数创建的对象称为一类对象,也将该构造函数成为一个类,所创建的对象称为该类的实例。 注:可用instanceof检查某个对象是否是一个类的实例 per instanceof Person
第一:prototype属性 (1).函数的内部都有一个属性:prototype, 该属性默认指向一个原型对象; (2).该原型对象中有一个constructor属性,该属性指向本函数对象; (则函数与它的原型对象可以相互转换、指向。fun.prototype.constructor=fun) 原型对象:就是一个空Object对象
第二:显示原型与隐式原型 (1).每个函数都有一个prototype属性,即显式原型 (2).该函数的实例对象都有一个__proto__属性,即隐式原型
*实例对象的__proto__属性指向原型对象 *即函数的显式原型和函数实例的隐式原型指向相同,都指向原型对象 *通过函数的显式原型prototype可以给原型对象添加属性或方法。 *该函数的所有实例对象都可以用原型中的属性与方法。 给原型对象添加属性或方法: Fun.prototype.a=1000 Fun.prototype.test=function(){ console.log('123'); }原型对象的作用: 原型对象相当于一个公共区域,函数所有的实例都可访问,则可将共有的属性或方法都统一添加到原型对象中,这样可以不用分别添加,也不会影响到全局的作用域。
别名:隐式原型链 (沿着__proto__的这条链) 作用:查找函数实例对象的属性(方法)
访问一个函数实例对象的属性或方法时,会按照原型链来查找:
1.先在对象自身中找,找到就可返回 2.如果没有,再沿着__proto__这条链向上查找,一直找到原型的尽头,找到返回 (先在原型对象中找,找不到就在原型的原型中找) 3.如果最终没有找到,返回undefined;原型链的结构: *Object的原型对象是原型链的尽头,toString等方法都是放在了Object的原型对象中。 *实例对象的原型的原型是Object的显式原型
所有对象都是Function的实例 var obj = new Object() 所有函数都是Function的实例(包括自身) var fun = new Function() Object是Function的实例
instanceof:用来判断一个对象是否为一个函数的实例对象; 若A instanceof B ,则判断A是否为B的实例对象,若是则返回true,若不是返回false;
instanceof是如何判断的?? *表达式: A instanceof B *如果B函数的显式原型在A对象的原型链上,返回true,否则返回false (B的显式原型在A的原型链上就可以,不管是哪级隐式原型链)