伙计。我正在研究物体的属性,有一件事引起了我对信息来源的关注。整个文件的这一部分就是关于JS的。说明javascript无法删除继承的属性。
原型属性 JavaScript对象继承了原型的属性。
delete关键字不会删除继承的属性,但是如果删除原型属性,它将影响从原型继承的所有对象。
我在这里有点失落......我知道这听起来很愚蠢,但我需要明白在流程和应用程序中可能发挥的意义。
伙计。我正在研究物体的属性,有一件事引起了我对信息来源的关注。整个文件的这一部分就是关于JS的。说明javascript无法删除继承的属性。
原型属性 JavaScript对象继承了原型的属性。
delete关键字不会删除继承的属性,但是如果删除原型属性,它将影响从原型继承的所有对象。
我在这里有点失落......我知道这听起来很愚蠢,但我需要明白在流程和应用程序中可能发挥的意义。
delete
从对象中移除属性。如果对象继承该属性而不是拥有该属性的属性,则在该属性上调用delete
不会执行任何操作:您无法删除那些不存在的内容。 :-)它是具有属性的对象的原型(或其原型,或其原型的原型等),而不是继承它的对象。
一个例子可能会有所帮助。试想一下:
// An object to use as a prototype
var p = {answer: 42};
// An object using `p` as its prototype
var o = Object.create(p);
console.log(p.answer); // 42
console.log(p.hasOwnProperty("answer")); // true
console.log(o.answer); // 42
console.log(o.hasOwnProperty("answer")); // false
p
有属性,而不是o
; o
只是继承它。像这样:
+−−−−−−−−−−−−−−−+ p−−−−−−−−−−−−−−−−−−−−−−+−>| (object) | | +−−−−−−−−−−−−−−−+ | | [[prototype]] |−−−>(Object.prototype) | | answer: 42 | +−−−−−−−−−−−−−−−+ | +−−−−−−−−−−−−−−−+ o−−−>| (object) | | +−−−−−−−−−−−−−−−+ | | [[Prototype]] |−+ +−−−−−−−−−−−−−−−+
所以delete o.answer
没有效果; o
没有answer
属性delete
删除。 p
是answer
的对象。
如果我们要从p
(delete p.answer;
)的财产,将它 —从p
删除。而且,由于原型继承的对象和它的原型之间的实时连接,要求o
为answer
这样做会给我们undefined
后,因为o
(有效)要求p
它,并p
没有它了:
// An object to use as a prototype
var p = {answer: 42};
// An object using `p` as its prototype
var o = Object.create(p);
console.log(p.answer); // 42
console.log(p.hasOwnProperty("answer")); // true
console.log(o.answer); // 42
console.log(o.hasOwnProperty("answer")); // false
delete o.answer; // No effect
console.log(p.answer); // 42
console.log(o.answer); // 42
delete p.answer; // Removes it from p
console.log(p.answer); // undefined
console.log(o.answer); // undefined
.as-console-wrapper {
max-height: 100% !important;
}