Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
260 views
in Technique[技术] by (71.8m points)

实例化对象时,Function和Object的疑惑

题目描述

今天研究原型链时,发现 f1 对象里面 __porto__ 存在 a 方法,不存在 b 方法,并且 arr 对象里面同样存在 a 方法,这就让我很疑惑 new 操作符到底是怎么将 Object 挂上去的,麻烦各位前辈解答下???

相关代码

var F = new Function();
Object.prototype.a = function () {
  console.log("aaa");
}
Function.prototype.b = function () {
  console.log("bbb");
}
var f1 = new F();
console.log(f1);

var arr = new Array();
console.log(arr);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

f1F 的实例,所以 f1.__proto__ === F.prototype。而原型对象也是对象,构造函数为 Object,所以 F.prototype.__proto__ === Object.prototype。于是 f1 的原型链上(图中蓝色线)也就有 a 方法。至于 Function.prototype,这是函数 F 原型链上(红色线)的(它既可以访问到 a 也可以访问到 b 方法)。
image.png


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...