繁体   English   中英

为什么这个数组原型不起作用?

[英]Why doesn't this array prototype work?

我不明白为什么数组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的原型系统),这意味着[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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM