什么是javascript原型?

时间:2013-09-16 08:33:26

标签: javascript prototype

我对javascript原型有点好奇 我在here找到了样本 我做了一些修改,所以我可以这样试试:

<html>
<body>
    <script>
        function Product(name, price) {
            this.name = name;
            this.price = price;
        }

        function Food(name, price) {
            Product.call(this, name, price);
            this.category = 'food';
            this.otherName = name;
        }
        Food.prototype = new Product();

        function Toy(name, price) {
            Product.call(this, name, price);
            this.category = 'toy';
        }
        Toy.prototype = new Product();

        var cheese = new Food('feta', 5);
        var fun = new Toy('robot', 40);
        var prod = new Product('test', 20);
        console.log(cheese);
        console.log(fun);
        console.log(prod);
    </script>
</body>
</html>

它会像这样返回

cheese = Food {name: "feta", price: 5, category: "food", otherName: "feta", name: undefined, price: undefined}
fun = Toy {name: "robot", price: 40, category: "toy", name: undefined, price: undefined}
prod = Product {name: "test", price: 20}

其make属性nameprice两次,如果我们区分Food.prototype = new Product();Toy.prototype = new Product();

,效率会更高吗?

为什么我必须使用那条线?

3 个答案:

答案 0 :(得分:3)

每个JavaScript对象都有第二个JavaScript对象(或null, 但这很罕见)与之相关。第二个对象被称为原型,而且 第一个对象从原型继承属性。

由对象文字创建的所有对象都具有相同的原型对象,我们可以参考 JavaScript代码中的此原型对象为Object.prototype。使用创建的对象 new关键字和构造函数调用使用prototype属性的值 构造函数的原型。所以new Object()创建的对象 继承自Object.prototype,就像{}创建的对象一样。同样, 由new Array()创建的对象使用Array.prototype作为其原型和对象 由new Date()创建,使用Date.prototype作为其原型。

答案 1 :(得分:1)

嗯,prototype属性允许您向对象添加属性和方法。

要了解的样本: -

<!DOCTYPE html>
<html>
<body>

<script>

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}
var fred=new employee("Fred Flintstone","Caveman",1970);

employee.prototype.salary=null;

fred.salary=20000;

document.write(fred.salary);

</script>

</body>
</html>

在上面的示例中,我们使用 prototype 向员工添加了一个属性(薪水)。

希望这会对你有帮助......

答案 2 :(得分:0)

像OOP一样,JS中的所有对象都是Object类的后代,它们继承Object.prototype中的所有属性,同时可以覆盖它们。 对象也可以有null原型,即Object.create(null)..