使用点符号将 属性 添加到 object.prototype 未按预期工作
Adding property to object.prototype using dot notation not working as expected
这里
// inherit methods of Date to extend it.
var extendDate=Date.prototype;
// add year property to Date.prototype, thus to an instance of Date
/*extendDate.year={
get: function() { return this.getFullYear(); },
set: function(y) { this.setFullYear(y); }
};*/
Object.defineProperty(extendDate, "year", {
get: function() { return this.getFullYear(); },
set: function(y) { this.setFullYear(y); }
});
// test year's getter and setter
// first, create an instance of Date
// remember, Date now inherits property year
var now=new Date();
alert(now);
now.year=2000;
alert(now);
使用 Object.defineProperty() 可以正常工作,但当我使用
时却不行
extendDate.year={
get: function() { return this.getFullYear(); },
set: function(y) { this.setFullYear(y); }
};
JSFiddle:https://jsfiddle.net/od53se26/1/
谢谢。
当使用 Object.defineProperty() 时,您提供 访问器描述符 用于访问 属性,而在注释代码中您只是简单地分配一个反对恰好有方法的 属性。
var obj = Object.prototype;
obj.awesomeProp = {
get: function() { return 'chicken satay'; }
};
// logs the whole awesomeProp object
console.log(obj.awesomeProp);
// logs "function () { return 'chicken satay'; }"
console.log(obj.awesomeProp.get);
Object.defineProperty(obj, 'anotherProp', {
get: function() { return 'chicken soup'; }
});
// logs "chicken soup"
console.log(obj.anotherProp);
// logs *undefined*
console.log(obj.anotherProp.get);
感谢您的澄清。还有一点:由于 Object.prototype 增加了两个额外的属性(awesomeProp 和 anotherProp),对象的任何实例也继承了这些属性。
Jsfiddle
https://jsfiddle.net/1nxtmeyu/
var obj = Object.prototype;
obj.awesomeProp = {
get: function() { return 'chicken satay'; }
};
Object.defineProperty(obj, 'anotherProp', {
get: function() { return 'chicken soup'; }
});
var AnyObj=function() {};
// AnyObj inherited awesomeProp and anotherProp
var child=new AnyObj();
alert(child.anotherProp); // alerts chicken soup
alert(child.awesomeProp.get); // alerts function() { return 'chicken satay'; }
child 从 Object.prototype 继承了 awesomeProp 和 anotherProp,如警报所示。
这里
// inherit methods of Date to extend it.
var extendDate=Date.prototype;
// add year property to Date.prototype, thus to an instance of Date
/*extendDate.year={
get: function() { return this.getFullYear(); },
set: function(y) { this.setFullYear(y); }
};*/
Object.defineProperty(extendDate, "year", {
get: function() { return this.getFullYear(); },
set: function(y) { this.setFullYear(y); }
});
// test year's getter and setter
// first, create an instance of Date
// remember, Date now inherits property year
var now=new Date();
alert(now);
now.year=2000;
alert(now);
使用 Object.defineProperty() 可以正常工作,但当我使用
时却不行extendDate.year={
get: function() { return this.getFullYear(); },
set: function(y) { this.setFullYear(y); }
};
JSFiddle:https://jsfiddle.net/od53se26/1/
谢谢。
当使用 Object.defineProperty() 时,您提供 访问器描述符 用于访问 属性,而在注释代码中您只是简单地分配一个反对恰好有方法的 属性。
var obj = Object.prototype;
obj.awesomeProp = {
get: function() { return 'chicken satay'; }
};
// logs the whole awesomeProp object
console.log(obj.awesomeProp);
// logs "function () { return 'chicken satay'; }"
console.log(obj.awesomeProp.get);
Object.defineProperty(obj, 'anotherProp', {
get: function() { return 'chicken soup'; }
});
// logs "chicken soup"
console.log(obj.anotherProp);
// logs *undefined*
console.log(obj.anotherProp.get);
感谢您的澄清。还有一点:由于 Object.prototype 增加了两个额外的属性(awesomeProp 和 anotherProp),对象的任何实例也继承了这些属性。
Jsfiddle https://jsfiddle.net/1nxtmeyu/
var obj = Object.prototype;
obj.awesomeProp = {
get: function() { return 'chicken satay'; }
};
Object.defineProperty(obj, 'anotherProp', {
get: function() { return 'chicken soup'; }
});
var AnyObj=function() {};
// AnyObj inherited awesomeProp and anotherProp
var child=new AnyObj();
alert(child.anotherProp); // alerts chicken soup
alert(child.awesomeProp.get); // alerts function() { return 'chicken satay'; }
child 从 Object.prototype 继承了 awesomeProp 和 anotherProp,如警报所示。