gpt4 book ai didi

javascript - 为什么这个数组原型(prototype)不起作用?

转载 作者:行者123 更新时间:2023-12-03 04:54:24 26 4
gpt4 key购买 nike

我不明白为什么数组 b[1] 不使用 f 作为 getter 和 setter,而数组 a 却使用 f。但两者都是数组。我在这里缺少什么?

function f(){
print("in f");
}


Object.defineProperty(Array.prototype, "0",
{ get : f, set:f});

var a=[];
var b=[1];

a[0]; // prints f
a[0]=1; //prints f
b[0]; // no print
b[0]=1; // no print

console.log("a is an array " + Array.isArray(a)); //a is an array true
console.log("b is an array " + Array.isArray(b));//b is an array true

最佳答案

var a = [] 做了一件事:它将 a 设置为 new Array 的实例,但没有任何成员,因此prototype[0] 被继承。

var b = [1] 做了两件事:它将 b 设置为 new Array 的实例(与 a),但随后直接设置下标[0] = 1(绕过JavaScript的原型(prototype)系统),这意味着[0] = 1覆盖 第“0”属性,从而完全避免 prototype[0] 中的 defineProperty

这与对象的工作方式相同:

Object.defineProperty( Object.prototype, "foo", { get: f, set: f } );

var a = {};
a.foo = 1; // will print "in f"

var b = { foo: 'a' }
b.foo = 1; // will not print "in f"

关于javascript - 为什么这个数组原型(prototype)不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42500646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com