javascript - 当 ob1.prototype 未定义时,Object.create() 应该如何从 ob1.prototype 创建 obj2.__proto__?
问题描述
如果我们假设这句话是真的:“prototype
是用于构建的对象__proto__
”,那么 Object.create 是如何工作的?如果你这样做:
let obj1 = {
name: "obj1",
}
const obj2 = Object.create(obj1);
Object.create()
应该obj2.__proto__
从什么ob1.prototype
时候开始创建ob1.prototype
??undefined
也许Object.create()
使用另一种创建原型继承的方法而不是构造函数或工厂函数?
因为,在Object.create()
上面的例子中,这是真的:
console.log(obj2.__proto__ === obj1);
但是如果我们对构造函数做同样的事情,这将是真的:
console.log(obj2.__proto__ === obj1.prototype);
用函数构造对象:
function obj1(name) {
this.name = name;
}
const obj2 = new obj1();
我错过了什么吗?
解决方案
您的句子“prototype
是用于构建的对象__proto__
”仅适用于function
被调用的 s new
。例如
let dog = new Animal();
等于:
let dog = Object.create(Animal.prototype); // <<<
Animal.call(dog);
原型继承本身只是意味着对象包含__proto__
对其原型的“内部”()引用。随着Object.create
您创建一个对象,其原型设置为传递的对象。所以
let inherited = Object.create(obj)
相当等于
let inherited = {};
inherited.__proto__ = obj;
推荐阅读
- python - 如何在python中使用正确的十进制值读取_csv浮点值
- ssrs-2008 - 从我的 SSRS 报告中每个组的总数计算总计
- ios - 键盘扩展为 UIKeyboardTypeNumberPad 返回 needsInputModeSwitchKey false
- pymatgen - 相对于晶轴的磁矩?
- html - 如何在某个位置显示带有使用(three.js)创建的3D对象的窗口?
- traefik - 与 docker compose 一起使用时覆盖默认的 traefik 前端规则
- html - CSS 引导程序:list-group-item hover+selected
- javascript - 如果我为模态添加数据切换,Linkbutton OnClick 将不会触发
- sql - 像 postgresql 数据问题中的运算符条件
- java - 如何在 ARCore Sceneform 中为节点创建动画(更改缩放、旋转或位置)?