Ошибка синтаксиса программы Javascript - PullRequest
0 голосов
/ 25 марта 2012

У меня есть синтаксическая ошибка, которую я не знаю, как исправить. Это код:

function computer(speed, hdspace, ram)
{
    this.speed=speed;
    this.hdspace=hdspace;
    this.ram=ram;
    this.price=get_price();
}
function get_price()
{
    var the_price=500;
    the_price += (this.speed == "2GHz") ? 200 : 100;
    the_price += (this.hdspace == "80GB") ? 50 : 25;
    the_price += (this.ram == "1GB") ? 150 : 75;
    return the_price;
}

var work_computer = new computer("2GHz", "80GB", "1GB");
var home_computer = new computer("1.5GHz", "40GB", "512MB");
var laptop_computer = new computer("1GHz", "20GB", "256");

var price = get_price();
var work_computer_price = work_computer.price();
var home_computer_price = home_computer.price();
var laptop_computer_price = laptop_computer.price();

document.write("<h1>Prices of the computers you requested:</h1>");
document.write("<h3><br/>Work Computer: </h3>"+work_computer);
document.write("Price: $"+work_computer_price);
document.write("<br/>");
document.write("Home Computer: "+home_computer);
document.write("Price: $"+home_computer_price);
document.write("<br/>");
document.write("Laptop Computer: "+laptop_computer);
document.write("Price: $"+laptop_computer_price);

В строке 22 появляется сообщение об ошибке: Uncaught TypeError: Свойство 'price' объекта # не является функцией Это строка 22:

var work_computer_price = work_computer.price();

Пожалуйста, помогите. Спасибо!

Ответы [ 3 ]

2 голосов
/ 25 марта 2012

Уберите скобки, когда вы присваиваете this.price:

this.price=get_price;

Вы хотите установить свойство "price" для ссылки на саму функцию, а не на возвращаемое значение ее вызова.

1 голос
/ 25 марта 2012

Вам лучше объявить getPrice() как член computer prototype, например:

var computer = function(speed, hdspace, ram)
{
    this.speed=speed;
    this.hdspace=hdspace;
    this.ram=ram;
    this.price=get_price();
}
computer.prototype = {
    get_price: function()
    {
        var the_price=500;
        the_price += (this.speed == "2GHz") ? 200 : 100;
        the_price += (this.hdspace == "80GB") ? 50 : 25;
        the_price += (this.ram == "1GB") ? 150 : 75;
        return the_price;
    }
}
0 голосов
/ 25 марта 2012

Как дела?

Проблема в том, что цена это не функция, а ее атрибут.

Так что в основном:

var work_computer_price = work_computer.price;

будет работать.

Ура!

...