类和原型。新手如何解释它们 来自C++、Java-的背景,我对类有点了解,但是用原型替换类(如JavaScript)似乎是完全不同的思维过程。 对于像我这样的新手来说,这可能真的很难理解,所以我将展示我自己的观察结果——这是我在做了一些解构之后得到的
javascript中的类是一个相对较新的概念,来自java背景的程序员最好以他们熟悉的方式进行解释。类和原型。新手如何解释它们 来自C++、Java-的背景,我对类有点了解,但是用原型替换类(如JavaScript)似乎是完全不同的思维过程。 对于像我这样的新手来说,这可能真的很难理解,所以我将展示我自己的观察结果——这是我在做了一些解构之后得到的,javascript,java,c++,class,prototype,Javascript,Java,C++,Class,Prototype,javascript中的类是一个相对较新的概念,来自java背景的程序员最好以他们熟悉的方式进行解释。 请启发我,因为我注定会犯错,我自己作为新手会错过重要的一点。以下是我的观察结果-。启发我,因为我目前缺乏很多知识,需要变得更好 类别: 1.由函数和变量组成 2.可以使用“扩展”关键字继承其内容 3.我们有家长班,孩子班 4.对象是使用构造函数(即函数)创建的对象 5.对象继承构造函数来自的类的所有权限 6.对象继承了对类中存在的变量和函数进行遍历的能力 7.一个对象可以继承另一个类的权限,
请启发我,因为我注定会犯错,我自己作为新手会错过重要的一点。以下是我的观察结果-。启发我,因为我目前缺乏很多知识,需要变得更好
类别: 1.由函数和变量组成 2.可以使用“扩展”关键字继承其内容 3.我们有家长班,孩子班 4.对象是使用构造函数(即函数)创建的对象 5.对象继承构造函数来自的类的所有权限 6.对象继承了对类中存在的变量和函数进行遍历的能力 7.一个对象可以继承另一个类的权限,即除其自身恩人(=类)之外的其他类 8.一个阶级本身没有权力,可以很好地描述为一个“群体”或一个文明的名字。这个名字只是出于外交原因才需要的 e、 g:“扩展”正在加载。 除此之外,所有做任何事情的能力都存在于变量、函数中
原型: 1.原型是一个对象->最初属于功能对象的对象。 是的,“一开始只有一个功能”, 是的,其余的JavaScript函数都是从它派生而来的 2.函数也可以是“构造函数”,它通常被称为“内置对象” 方法只不过是一个变量/属性/对象与函数的组合 4.原型只是一个包含函数和更多属性的属性。这就是属性如何变成“不仅仅是属性”——它变成了一个对象
5.但是这个对象“原型”是特殊的,你看。wise old对象将其提供给所有内置的、用户定义的函数、自由使用其内容的对象以及其继承能力 原型遗传: 一个对象可能是另一个对象的原型。我们可以通过设置prototype([[proto]])属性来实现这一点:
var parent={
name:"example"
}
var child={
age:16
}
Object.setPrototypeOf(child,parent);
child.name="child";
child.name;//child
parent.name//example
但为什么原型有用呢?让我们考虑两种情况:
var parent={
name:"example"
}
var child={
age:16
}
Object.setPrototypeOf(child,parent);
child.name="child";
child.name;//child
parent.name//example
child.name;//"example" as its part of the prototype
child.age;//its own property
parent.name;//"example"
parent.age;//undefined
当我们设置属性时:
var parent={
name:"example"
}
var child={
age:16
}
Object.setPrototypeOf(child,parent);
child.name="child";
child.name;//child
parent.name//example
这就是继承的基本原理。这很容易,也不太难。要创建实例,可以使用Object.create,也可以使用上面示例中所示的setPrototypeOf(它非常新):
高级原型设计:
但是上面的代码缺少什么呢?嗯,我们需要构造函数强>
因此,我们可以简单地创建一个函数,将对象(称为工厂函数)与原型集组装在一起:
function createChild(age){
var child=Object.create(parent);
child.age=age;
}
var child=createChild(15);
它有一个问题:如果我们想要一个孩子怎么办
var thomasProto=Object.create(createChild(age));
thomasProto.name="Thomas";
function createThomas(age,someother){
var instanceofThomas=Object.create(thomasProto);
//how do we set age ?
child.someother=someother
}
然而这并不是很简单,这就是为什么引入了新的构造函数
它是这样做的:
child -> parent.prototype -> Object -> null
JS中的类继承
JS中没有类继承。只有一个类语法提供了另一种创建原型继承的方法。看看,感谢您的努力,dudebetter:prototype属性指向另一个对象。当objectts键解析为值时,它首先检查当前对象是否具有该值,如果没有,则转到原型并重复。如果它到达!我们的观察基本上是由一两个例子组成的。继承非常复杂,在js中被广泛使用…@Jonasw我同意这一点,因为我需要学习很多东西。但是你能详细介绍一下“指向另一个对象的原型”吗?这就是你所说的原型指向另一个对象的意思,换句话说,这意味着原型也可以用于两个对象之间的继承。@yasaaMoin不是太多,而是只有“唯一”?那么这意味着原型比我想象的更强大。而且,感谢先进的原型部分,我学到了很多today@yasaaMoin函数也有原型。。是的,用js编写不使用任何原型的代码几乎是不可能的…@yasaaMoin:nope。那不是我的工作。请简单地打开另一个问题,所以,我不是唯一的JS大师在那里。。。