Как Т.Дж. Краудер говорит ... это не JSON. Я думаю, возможно, проблема в том, что свойство getArea вашего объекта круга устанавливается равным тому, что возвращает функция getArea. Это означает, что circle.getArea () не будет работать, потому что circle.getArea это число. Это неправильно, но я думаю, что это на шаг ближе к тому, чего вы пытаетесь достичь (я покажу лучший путь после этого):
var circle = {
radius : 9,
getArea : function(){
return Math.PI * 9 * 9;
}
};
alert(circle.radius);
alert(circle.getArea());
Важно отметить, как я определяю функцию getArea внутри объекта. Это может быть полезно, но проблема в том, что функция get area не имеет доступа к переменной radius, потому что такие объекты, как circle, не имеют собственной области видимости. Если вы попробуете:
var myObj = {test:this};
alert(myObj.this);
Вы увидите [object DOMWindow]
Так как же создать объект Circle со свойством radius и методом getArea? Есть много способов. Один из способов таков:
function Circle(r){
var c = this;
this.radius = r;
this.getArea = function(){
return Math.PI * c.radius * c.radius;
}
}
var circle = new Circle(10);
document.write(circle.getArea()+"<br/>");
circle.radius = 20;
document.write(circle.getArea()+"<br/>");
var otherCircle = new Circle(1);
document.write(otherCircle.getArea()+"<br/>");
Я создал jsFiddle вышеупомянутого .
Этого также можно достичь, используя свойство prototype:
function Circle(r){
this.radius = r;
}
Circle.prototype.getArea = function(){
return Math.PI * this.radius * this.radius;
}
var circle = new Circle(10);
document.write(circle.getArea()+"<br/>");
circle.radius = 20;
document.write(circle.getArea()+"<br/>");
var otherCircle = new Circle(1);
document.write(otherCircle.getArea()+"<br/>");