问题似乎已经得到解答,但 OP 想要访问对象的类和对象,就像我们在 Java 中所做的那样,选择的答案还不够(恕我直言)。
通过下面的解释,我们可以得到一个对象的一个类(在javascript中实际上叫做prototype)。
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
你可以像这样添加一个属性:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
但.last 属性仅可用于从 Array 原型实例化的“arr”对象。因此,为了让所有从 Array 原型实例化的对象都可以使用 .last 属性,我们必须为 Array 原型定义 .last 属性:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
这里的问题是,你必须知道'arr'和'arr2'变量属于哪个对象类型(原型)!换句话说,如果您不知道“arr”对象的类类型(原型),那么您将无法为它们定义属性。在上面的示例中,我们知道 arr 是 Array 对象的实例,这就是我们使用 Array.prototype 为 Array 定义属性的原因。但是如果我们不知道 'arr' 的类(原型)怎么办?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
如您所见,在不知道 'arr' 是一个数组的情况下,我们可以通过使用 'arr.__proto__' 来添加一个新属性,仅引用 'arr' 的类。
我们在不知道它是 Array 实例的情况下访问了“arr”的原型,我认为这就是 OP 所要求的。