-
使用原型来实现继承
-
可以改变对象的原型
-
原型和对象有相同方法优先使用对象的方法
-
函数的原型
- prototype
- 调用构造函数时赋予给对象的原型
- proto
- 函数本身的原型
- prototype
-
对象的 只服务本身,而 对象服务于其他的实例
-
通过原型可以找到对象,通过对象可以找到原型 ,使用constructor可以创建其他对象
-
原型链
- 检测原型链 (判断构造函数) , (判断对象)
- 从自己到原型上查找 只查找自己
-
借用原型
- apply,call
-
创建原型
- 创建原型后无法获取,浏览器产商设置使用---- 来设置或者获取原型
- 现在推荐使用 、 来设置或者获取原型
- ---- 本质上是一个 get 和set ,在设置时只能添加对象,否则会被拦截,如果实在要设置,则将对象的原型置为
-
----
-
继承是原型的继承,而不是改变构造函数
Object.prototype.__proto__ = Object.prototype -
使用 表示直接改变原型的指向
-
使用 表示创建一个空对象,这个空对象的原型是 ,并且这个空对象将成为被赋予的原型
-
这样改变原型后将失去本身的构造函数 ,因此需要再额外设置构造函数
Object.protoype.controctor = object -
如果像上面设置构造函数,那么构造函数可以被遍历出来,但实际上我们不想要这个属性被遍历,因此可以这样设置
Object.defineprototype(A.prototypt,"constructor",{ value: A, enumerable: false })
-
-
不支持多重继承,为了实现多重继承的功能,可以将需要的添加的方法写成一个对象,将这个对象添加到原型中
const Address = { getAddress(){ console.log('获取地址') } } obj.prototype = Object.assign(obj.prototype,Address) -
访问当前对象的原型_()_
const Credit = { __proto__: Request, total(){ console.log(super.ajax+'积分统计');//super指的是Request的原型 } }
-