JavaScript--------原型链

原型链:

const myObject ={
    city:"Madrid",
    greet(){
        console.log(`来自${this.city}的问候`);
    },
};

结果展示:

 

当在控制台输入 myObject.时,控制台会列出该对象可用的一系列属性:

尝试输入一个myObject.toString();发现可以成功调用:

额外的属性:

①JavaScript 中所有的对象都有一个内置属性,称为它的 prototype(原型)。它本身是一个对象,故原型对象也会有它自己的原型,逐渐构成了原型链。原型链终止于拥有 null 作为其原型的对象上。

②备注: 指向对象原型的属性并不是 prototype。它的名字不是标准的,但实际上所有浏览器都使用 __proto__。访问对象原型的标准方法是 Object.getPrototypeOf。

③当你试图访问一个对象的属性时:如果在对象本身中找不到该属性,就会在原型中搜索该属性。如果仍然找不到该属性,那么就搜索原型的原型,以此类推,直到找到该属性,或者到达链的末端,在这种情况下,返回 undefined

④所以,在调用 myObject.toString() 时,浏览器做了这些事情:

  • 在 myObject 中寻找 toString 属性
  • myObject 中找不到 toString 属性,故在 myObject 的原型对象中寻找 toString
  • 其原型对象拥有这个属性,然后调用它。

⑤myObject 的原型是什么?  可以使用 Object.getPrototypeOf() 函数:

Object.getPrototypeOf(myObject); // Object { }

⑥有个对象叫 Object.prototype,它是最基础的原型,所有对象默认都拥有它。Object.prototype 的原型是 null,所以它位于原型链的终点。

⑦一个对象的原型并不总是 Object.prototype

const myDate = new Date();
let object = myDate;

do {
  object = Object.getPrototypeOf(object);
  console.log(object);
} while (object);

// Date.prototype
// Object { }
// null

这段代码创建了 Date 对象,然后遍历了它的原型链,记录并输出了原型。从中我们知道 myDate 的原型是 Date.prototype 对象,Date.prototype的原型是 Object.prototype

 例如:myDate.getMonth(),是在 Date.prototype 上定义的方法调用的。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值