我学习 javascript 已经有一段时间了。我读的书说 Javascript 是一种函数式解释语言。但是我遇到的许多其他资源都说 Javascript 是面向对象的。那么JS到底属于哪一种呢?或者这并不重要?谢谢
原文由 Codier 发布,翻译遵循 CC BY-SA 4.0 许可协议
我学习 javascript 已经有一段时间了。我读的书说 Javascript 是一种函数式解释语言。但是我遇到的许多其他资源都说 Javascript 是面向对象的。那么JS到底属于哪一种呢?或者这并不重要?谢谢
原文由 Codier 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的。您可以将 javascript 用作传统的面向对象语言:
//Animal Class
function Animal(_name){
this.name = _name;
}
Animal.prototype.sleep = function(){
console.log('zzzz');
}
Animal.prototype.talk = function(){
console.log('Hey! how\'s it going?');
}
// Dog Class
function Dog(_name){
// call the parent constructor
Animal.apply(this,arguments);
}
// extends the Animal prototype chain
Dog.prototype = new Animal();
Dog.constructor = Dog;
Dog.prototype.talk = function(){
console.log('woof woof');
}
//MAIN
var dog = new Dog('roofus');
dog.sleep(); //produces 'zzzzz'
dog.talk(); //produces 'woof woof'
这种技术模仿经典继承模型,通常被称为“伪经典继承”
Javascript 是围绕原型继承构建的。这意味着您不是扩展类,而是扩展对象(原型)。您也可以通过这种技术使用继承。
var Animal = (function(){
//everything inside the closure
//above outside returned object acts as a private variable
var private = "private variable";
//everything returned is a public field of the object
var self = {};
self.name = null;
self.sleep = function(){
console.log('zzzzz');
};
self.talk = function(){
console.log('hey how\s it going');
};
return self;
})();
var Dog = (function(){
var self = Object.create(Animal);
self.talk = function(){
console.log('woof woof')
};
})();
//MAIN
var dog = Object.create(Dog);
dog.name = "roofus";
dog.sleep(); //produces 'zzzzz'
dog.talk(); //produces 'woof woof'
重要的是要了解这是如何/为什么起作用的。 Object.create 创建一个新对象,并将该对象的隐藏“原型”( proto ) 作为您传入的参数。javascript 的工作方式本质上是当您访问对象的字段(基元、方法、对象)时,js 引擎循环遍历该对象上定义的属性,如果找到该属性,则返回它,如果没有,它会检查对象的隐藏原型 proto 属性并执行相同的操作。它递归地执行此操作,直到搜索了整个原型链或返回了某些内容。
同样重要的是要记住 OOP 不仅仅是继承。重要的 OOP 构造,如组合和封装,是编写结构良好的 JavaScript 的基础。
原文由 cphoover 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答822 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
JavaScript 确实 有对象。我会说它是一个混合体:解释型、函数式、面向对象和动态。
我认为这些特征确实非常重要。它们使它成为一门优秀的语言,一种日益重要的语言。