我试图更好地理解JavaScript及其内幕。
我已经阅读了关于基于JavaScript使用的原型的面向对象范例的不同指南,但是我真的不明白这种范例与常规的范例之间有何不同。
在我看来,它的行为方式相同,但语法却很奇怪。我错了吗?它们之间有什么区别?
您能否给我一个具体的示例,在该示例中可以成功使用JS范式,而在常规OOP范式中却不太适合?
最佳答案
区别在于,在Java,C ++,python,php和其他支持OOP的语言中,您通常具有两种不同的语言元素-一种是Class
作为元数据,然后我们根据类定义创建新的对象。 object
这样是语言的第二个要素。
在JavaScript中,没有Class
元素,只有object
。我们可以创建一个对象,然后将其用作创建其他对象的原型,例如:
var animal = {
"name": "Bim",
"age": 5
};
// now we can use the animal object iself, for example pass it to some function
// that shows object name
function showName(obj) {
alert(obj.name);
}
showName(animal);
// but we also can use it as a prototype to create new objects
var dog = Object.create(animal);
dog.bark = function() {
alert(this.name + ": bark! bark!");
}
dog.name = 'Pluto';
dog.bark();
有许多方法可以用类来模拟OOP,因为它可以在其他语言中工作,而这正是您可能在
act in the same way, but only with a weird and tricky syntax
中所指的。实际上,不一定要拥有类,它取决于您的习惯和应用程序设计。可以只使用对象,特别是如果您更喜欢组合而不是继承。