我是一名开发人员,拥有大约9年的Java和C#背景历史。
在那些语言中,类和分类学分类和对象范例固有。
所以,当ECMA6出现时,我很高兴看到语言课程......我开始在各处使用它们。
事实证明,在JavaScript中使用类是一个陷阱。
If you use them, you will go to your grave never knowing how miserable you are.
你永远不会真正理解JavaScript。你会认为你这样做,但你不会。
很明显,在看了这个完整的会议后,我意识到我不懂JavaScript 。
我一生都习惯用OOP格式化课程范例,现在我甚至不知道在哪里寻求帮助,甚至不知道如何开始。
非JavaScvript的一个例子:
class Animal{
constructor(aName){
this.name = aName;
}
}
class Dog extends Animal{
constructor(){
super(aName);
this.type = "Furry dog";
}
}
let myDog = new Dog("Boby");
此时,我正在寻找指导。在尝试之后我找不到任何有用的东西,主要是因为我相信我迷失了以至于我甚至都没有找到正确的东西。
提前致谢。
答案 0 :(得分:9)
据我所知,JavaScript是一种基于Prototype的语言,具有一流的功能,您可以阅读here。
现在。实际上,这只是一种OPP风格,意味着你将在工作和思考对象和继承。你只需要知道,在JavaScript中,没有类而是原型。但要记住。这都是关于功能的。
要制作自己的对象定义,请按以下步骤操作:
function Animal() {
this.name = null;
this.age = 0;
this.genus = null;
this.isWild = true;
};
Animal.prototype.hasName = function() {
return this.name !== null;
};
Animal.prototype.isItWild = function() {
return this.isWild;
};
// Here we create an instance of Animal
var someAnimal = new Animal();
// Let's give it a name
someAnimal.name = 'Dobby';
console.log('Hey there. My pet name is %s', someAnimal.name);
console.log('is it wild? %o', someAnimal.isWild);
现在你有了动物原型。让我们看看如何扩展其属性以创建Dog原型:
function Dog() {
this.genus = 'Canis';
this.race = 'unknown';
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.bark = function() {
console.log('rrouff!);
};
让我们现在创造一个种族的狗:
function SiberianHusky(name, age) {
this.name = name;
this.age = age;
this.race = 'Siberian Husky';
}
SiberianHusky.prototype = Object.create(Dog.prototype);
SiberianHusky.prototype.constructor = SiberianHusky;
// Let's create our Siberian Husky
var myPet = new SiberianHusky('Bobby', 5);
// Aww. It is barking!
myPet.bark();
您可以在示例中看到每个定义都使用the Object prototype。这用于定义对象的方式。您可以将其视为类定义。
不是每次都写入原型,而是可以执行以下操作:
Animal.prototype = {
name: null,
age: 0,
genus: null,
isWild: true,
hasName: function() { ... }
isItWild: function() { ... }
}
要完全理解原型的概念以及它们如何相互继承,您可以查看this。
JavaScript是一种多范式语言。您可以使用Object Oriented Programming Paradigm,Imperative Programming Paradigm和Functional Programming Paradigm,这意味着您可以通过多种不同的方式对同一个应用程序进行编程。
https://en.wikipedia.org/wiki/JavaScript
https://en.wikipedia.org/wiki/Prototype-based_programming
干杯。