第六章 面向对象的程序设计

  1. 理解对象:a.数据属性:[[Configurable]]布尔值表示是否可以删除属性、[[Enumerable]]表示是否可以for-in循环属性 、[[Writable]]是否可以修改属性的值、 [[Value]]包含属性的值,修改数据属性的方法Objec.defineProperty(‘对象’‘属性’,{属性:true,属性:值});b.访问器属性:除了ConfigurableEnumerable属性之外,还有GetSet属性,表示读取属性和写入属性时调用的函数,Object.definePropertie(‘对象’,{属性:{},属性{}})方法可以一次性定义多个属性;c.读取属性的特性:如果想通过属性来读取属性设置了那些描述符,可以通过Object.getOwnPropertyDescriptor(对象,对象的属性);
  2. 创建对象:①使用new操作符创建对象,在内部自动创建一个新的对象并将构造函数的作用域赋值给对象,执行代码,最后返回该对象;②对象.call(实例)表明在实例中创建了对象的构造函数后,实例可以获得该对象的所有属性和方法;③每个函数都有prototype原型属性,该属性是一个指针,指向一个对象,该对象包含了所有的实例所共享的属性和方法;④每个新实例都存在一个指向构造函数的原型对象的指针,这个指针在实例的prototype属性中的__proto__;因此在构造函数的原型对象上的属性和方法都可以被所有实例共享,而构造函数的属性和方法则都是私有的,要判断一个实例和一个构造函数的原型对象之间是否存在这种关系,可以调用构造函数.prototype.isPrototypeOf(实例)方法判断;在访问属性的时候会先在实例中搜索,搜索不到才会在原型对象中搜索;使用实例.hasOwnProperty(属性)只有当给定的属性存在于对象实例中才会返回true;使用in操作符能够判断一个属性是否存在该实例或者实例的对象中 属性 in  实例 ,如果存在就返回true,而使用forin循环遍历属性时,将会返回对象的所有属性无论在原型对象还是实例中;⑤在重写构造函数的原型对象时,要将原型对象 中的constructor属性指向构造函数
  3. 继承:原理:让构造函数本身的原型对象指向另一个原型对象或者另一个原型对象的实例,在使用字面量方式重写构造函数的原型时,如果该构造函数继承了另一个构造函数的原型对象,则需要在字面量添加 constructor:另一个构造函数.prototype,现在通常通过call来修改作用域实现继承属性并且还能够传递参数,使用修改构造函数的原型对象指向另一个构造函数的实例来继承方法(修改后需要将constructor指向本身的构造函数),记住父构造函数的原型对象上的属性和方法,在被继承后,会变成子构造函数的属性和方法

猜你喜欢

转载自www.cnblogs.com/Liqian-Front-End-Engineer/p/11258768.html