当前位置: 首页 > Web前端 > JavaScript

备注

时间:2023-03-27 16:42:05 JavaScript

对象继承构造函数缺点面向对象编程最重要的方面之一是对象继承。通过继承B对象,A对象可以直接拥有B对象的所有属性和方法functionCat(name,color){this.name=name;this.color=颜色;this.meow=function(){console.log('喵');};}varcat1=newCat('bighair','white');varcat2=newCat('twohair','black');cat1.meow===cat2.meow//Falsecat1和cat2是同一个构造函数的两个实例,它们都有一个meow方法。由于喵喵方法是在每个实例对象上生成的,所以两个实例生成了两次。也就是说,每创建一个新的实例,都会创建一个喵喵方法。这是不必要的,也是对系统资源的浪费,因为所有喵喵叫方法都有相同的行为,应该共享。原型属性的作用每个函数都有一个指向对象的原型属性。functionf(){}typeoff.prototype//“对象”原型对象的属性不是实例对象本身的属性。只要修改了原型对象,修改就会立即反映到所有的实例对象中。Animal.prototype.color='yellow';cat1.color//"yellow"cat2.color//"yellow"原型链Object.prototype的原型为null。null没有属性或方法,也没有自己的原型。因此,原型链的末尾为空。Object.getPrototypeOf(Object.prototype)//null如果构造函数的prototype属性指向一个数组,则表示实例对象可以调用数组方法。varMyArray=function(){};MyArray.prototype=newArray();MyArray.prototype.constructor=MyArray;varmine=newMyArray();mine.push(1,2,3);mine.length//3mineinstanceofArray//trueconstructor属性原型对象有一个constructor属性,默认指向原型对象的构造函数。functionP(){}P.prototype.constructor===P//true由于constructor属性是定义在原型对象上的,也就是说它可以被所有的实例对象继承。functionP(){}varp=newP();p.constructor===P//truep.constructor===P.prototype.constructor//truep.hasOwnProperty('constructor')//falsesenstanceofoperator#的instanceof运算符返回一个布尔值,指示对象是否是构造函数的实例。varv=newVehicle();vinstanceofVehicle//真