面试知识点总结 - js 原型

  1. 构造函数+原型链

一般情况下,属性在对象本身上,方法在原型中

  1. prototype(显示原型)
  1. 每个函数都有一个prototype,为一个空对象{},称为原型对象({}无自己 写的属性).
  2. 原型对象中有constructor,__proto__两个属性
  3. 原型对象中的__proto__存的地址值等于Object.prototype存的地址值,地址值指向同一个对象所以相等
  4. 原型对象中的__proto__默认指向Object的实例对象Object.prototyp(Object构造函数除外,因为它的原型对象直接就是Object.prototyp)
  5. 原理
    function Fun(){} 函数
    内部代码 : Fun.prototype = {}
  6. 原型对象中的constructor,指向该函数对象
    Fun.prototype.constructor = Fun
  1. proto(隐式原型)
  1. 每个函数都有一个__proto__,都是Function.prototype
  2. 每个实例对象都有一个__proto__
  3. 原理
    var fun = new Fun()
    fun.proto = Fun.prototype
    内部代码 : fun.proto = Fun.prototype
  1. 规则
  1. 实例对象隐式原型等于构造函数显示原型
    fun.proto === Fun.prototype
    //fun是实例对象,不是函数,没有 prototype
    Fun.proto === Function.prototype
    Function.proto === Function.prototype
    Object.proto === Function.prototype
  2. 给原型对象添加属性,函数的所有实例对象自动拥有原型对象中的属 性
    Fun.prototype.fn1 = function(){}
  3. 在自己的属性上找,没有就沿着__proto__找,如果没找到返回 undefined
    Object.prototype.proto = null 原型链终点
  4. 原型链是用来查找对象属性的
    作用域是针对变量
    原型链是针对构造函数
  1. 隐式原型链
  1. Fun.prototype的最终值是{}
  2. Object.prototype是原型链顶级
  3. Instanceof : 判断第一个参数的原型链上是否有第二个参数的构造函 数
    看fun和Fun.prototype的值是怎么来的,fun是通过构造函数Fun来的, 所以fun.__proto__指向Fun.prototype,Fun.prototype的值是{},是通过 Object构造函数来的,所以Fun.__proto__指向Object.prototype
  4. 例子
    // fun Fun.prototype/{} Object.prototype
    // Fun Function.prototype/{} Object.prototype
    // Object Function.prototype/{} Object.prototype
    // {} Object.prototype/{}
    // 123 Number.prototype/{} Object.prototype
    // Number Function.prototype/{} Object.prototype
  1. 原型链继承
  1. 改变prototype
    Sub.prototype = new Supper()
  2. 改变contructor
    Sub.prototype.contructor = Sub
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 测试题
function Fun(){}
Fun.prototype.n = 1
var a = new Fun()
Fun.prototype = {
    n:2,
    m:3
}
// Fun.prototype.n = 2
// Fun.prototype.m = 3
var b = new Fun()
console.log(a.n,a.m,b.n,b.m)    //1 undefined 2 3

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值