为什么在Chrome开发者工具中object.[[Prototype]]无法正常工作?

3

2
教程明确说明:可以使用访问器 Object.getPrototypeOf()Object.setPrototypeOf() 访问[[原型]]。这相当于 JavaScript 属性__proto__,它是非标准的,但被许多浏览器实现。 - ibrahim mahrir
1
因为它是无效的语法。 - Bergi
因此,要访问原型,请使用 Object.getPrototypeOf(g)g.__proto__ 而不是 g.[[Prototype]],后者实际上应该会抛出错误。 - ibrahim mahrir
请参见以下链接:https://dev59.com/8F4b5IYBdhLWcg3wnCpy 或 https://dev59.com/-VwY5IYBdhLWcg3wD0HG - Bergi
1个回答

2

因为您尝试以错误的方式访问原型,正确的方法应该是g.__proto__(但您永远不应该使用g.__proto__,它已被弃用,并且不适用于所有对象)或Object.getPrototypeOf(g)

function Graph() {
  this.vertices = [];
  this.edges = [];
}

Graph.prototype = {
  addVertex: function(v) {
    this.vertices.push(v);
  }
};

var g = new Graph();
console.log(g.__proto__); // get access to prototype
console.log(Object.getPrototypeOf(g)); // get access to prototype

更新

"我想执行一个新的Graph(3),并期望顶点在数组中有3。"

只需使用g.addVertex(3);调用带参数3addVertex函数(它只会改变g.vertices数组)。以下是示例:

function Graph() {
  this.vertices = [];
  this.edges = [];
}

Graph.prototype = {
  addVertex: function(v) {
    this.vertices.push(v);
  }
};

var g = new Graph();
g.addVertex(3);
console.log(g.vertices);

但是您也可以将参数传递给构造函数,像这样:

function Graph(param) {
  this.vertices = [param];
  this.edges = [];
}

Graph.prototype = {
  addVertex: function(v) {
    this.vertices.push(v);
  }
};

var g = new Graph(1);
var h = new Graph(2);
console.log(g.vertices);
console.log(h.vertices);


你不应该使用 g.__proto__。它已被弃用,并且不能在所有对象上正常工作! - Bergi
@Bergi,不知道那个,谢谢!我会纠正我的答案。 - P.S.
谢谢,@Commercial Suicide。如何使用一些参数调用addVertex函数?由于它是一个构造函数,我想执行类似new Graph(3)的实时操作,并期望数组中的顶点为3。语法是什么? - Johann Gomes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接