2015-10-21 141 views
0

使用原型面向对象编程我是一个新手的js空中接力。 我读书的地方,原型在OOP用于JS 确定这里是一个例子为什么我们在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); 

我读的功能可以被分离出来,并通过原型,他们可以被添加到该对象。 请帮帮我。我很困惑..

那么问题只是 为什么使用Object.prototype的方法?现在

+0

原型允许你以确保这个类的任何对象将具有(至少在开始时),该属性(即变量,方法)。 – MaxZoom

+0

JavaScript不是类型化,所以你不能用'狗杜宾=新狗()',但你肯定可以用'VAR杜宾=新狗()' – Phil

+0

对于'Object.create',我建议你阅读文档〜 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create – Phil

回答

2

我的问题是,为什么我们不能只创建对象是这样的:Dog dog = new Dog;

可以,实际上。你Dog功能也作为一个“构造函数”,像这样:

var doberman = new Dog("Fenton"); 

我明白这是令人困惑,因为JavaScript提供这样做(基本上)同样的事情很多不同的方式,例如:

var doberman = { name: "Fenton", age: 5, bark: function() { return "woof"; } } 

(虽然我的第一个示例创建一个使用Dog为原型(一种继承关系),而我的第二个示例创建一个新的object实例与非继承唯一实例级属性新object比如,尽管由于JavaScript的鸭子打字th在很多时候,差异很重要(尽管高性能JavaScript总是比实例级属性更喜欢原型构造函数)。

+0

你的意思是我们也可以在Js没有原型的情况下做OOP?那么它会影响性能正确的原因,因为它们不是每个实例都重新创建的? –

+0

@MarcAndreJiacarrini是的,尽管在方法上使用原型可以为每个实例节省内存。如果你没有太多实例,那么简单地不使用原型就不会对你造成太大影响。 –

相关问题