js | 原型链

为什么前者会输出Lucas 后者不会?call动作具体干了什么?

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/

function Foo(){
    this.bar="Lucas"
}
let obj={};
obj.__proto__=Foo.prototype;
Foo.call(obj)
console.log(obj.bar); //  输出Lucas

// ------------------------------
function Foo(){
    this.bar="Lucas"
}
let obj={};
obj.__proto__=Foo.prototype;
console.log(obj.bar); // undefined
  • 每个对象都有__proto__,实际是[[prototype]]的写法;
  • 构造函数(对象)不仅有__proto__,还有prototype;
    • 构造函数的__proto__指向Function.prototype
    • 构造函数的prototype指向Foo.prototype; 拿上述举例子
  • Foo.prototype里面实际没有bar;
  • 当执行Foo.call(obj)的时候,实际就是运行了Foo(),把Foo()中this指向obj;所以实际就是
    • obj.bar=“Lucas”;

相关推荐

  1. js | 原型

    2024-07-17 11:02:02       24 阅读
  2. js 原型原型

    2024-07-17 11:02:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 11:02:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 11:02:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 11:02:02       58 阅读
  4. Python语言-面向对象

    2024-07-17 11:02:02       69 阅读

热门阅读

  1. baomidou @DS注解

    2024-07-17 11:02:02       23 阅读
  2. arkts中状态管理

    2024-07-17 11:02:02       25 阅读
  3. mac如何查看cpu和显卡温度

    2024-07-17 11:02:02       26 阅读
  4. 关于HBase、Phoenix、Flume、Maxwell 和 Flink

    2024-07-17 11:02:02       25 阅读
  5. 银河麒麟如何部署QtMqtt(入门案例教程)

    2024-07-17 11:02:02       24 阅读
  6. Android中ContentProvider学习记录

    2024-07-17 11:02:02       22 阅读
  7. IPython 宏魔法:%macro 命令的高效使用指南

    2024-07-17 11:02:02       25 阅读
  8. 五、python列表

    2024-07-17 11:02:02       27 阅读