上一节我们设置了私有属性与方法,但它们现在无法在对象外部访问。假如我们想在外部获取 dafaultLocation
该怎么做呢?
我们用 Object.defineProperty
方法设置能访问的属性:
function Circle(radius) {
this.radius = radius;
let defaultLocation = {x: 0, y: 0};
this.draw = function() {
console.log('draw');
};
Object.defineProperty(this, 'defaultLocation', {
get: function() {
return defaultLocation;
}
})
};
我们可以像访问属性那样使用它:
const circle = new Circle(1);
circle.defaultLocation;
// {x: 0, y: 0}
同时 defaultLocation
现在是只读属性,并不能从外部修改。
如果需要从外部修改属性,那么需要一个 set
方法:
function Circle(radius) {
this.radius = radius;
let defaultLocation = {x: 0, y: 0};
this.draw = function() {
console.log('draw');
};
Object.defineProperty(this, 'defaultLocation', {
get: function() {
return defaultLocation;
},
set: function(value) {
if (!value.x || !value.y)
throw new Error('Invalid Location!')
defaultLocation = value;
}
})
};
还是像使用属性那样操作,参数不合法将有报错:
const circle = new Circle(1);
circle.defaultLocation = {x: 2, y: 2};
circle.defaultLocation = 1;
// Uncaught Error: Invalid Location!
网友评论