为什么我们在JS中使用Prototype进行面向对象编程

时间:2015-10-21 04:02:53

标签: javascript prototypal-inheritance

我是Js OOp的新手。 我正在阅读OOP JS function Dog(name) { this.name = name; this.age = age; this.bark = function() { console.log("Woof"); } } 中使用原型的地方 好的,这是一个例子

Dog doberman = new Dog;

现在我的问题是为什么我们不能只创建像这样的对象

var doberman = Object.create(dog);

这会创建一个新的Dog对象。

但是通过原型我们会做这样的事情

public static int[ ] Letters(string a) {
    string p = "AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ"; // Lithuanian letters
    int [ ]rez = new int[p.Length];
    int ind = 0;
    foreach (char r in a ) {
       ind = p.IndexOf(r);
       if (ind>=0)
           rez[ind] ++; 
    }
    return rez;
}

我读到函数可以分开,通过原型可以将它们添加到对象中。 请帮帮我。我很困惑..

问题很简单 为什么要将Object.prototype用于方法?

1 个答案:

答案 0 :(得分:2)

  

现在我的问题是为什么我们不能只创建这样的对象:print(star(4)) * *** *** *

你可以,实际上。您的Dog dog = new Dog;函数也可以作为“构造函数”,如下所示:

Dog

我很欣赏这是令人困惑的,因为JavaScript提供了许多不同的做法(基本上)相同的东西,例如:

var doberman = new Dog( "Fenton" );

(尽管我的第一个示例创建了一个使用var doberman = { name: "Fenton", age: 5, bark: function() { return "woof"; } } 作为原型(一种继承)的新object实例,而我的第二个示例创建了一个只有实例的新Dog实例-level属性不是继承的,但是由于JavaScript的鸭子类型很少有差异很重要(尽管在高性能的JavaScript中总是更喜欢原型构造函数而不是实例级属性)。