来自C ++的背景,java-I确实对类有一点了解。但用原型替换类(如在javascript中)似乎是一个完全不同的思维过程。 对于像我这样的新手来说,这可能真的很难掌握 - 所以我将展示自己的观察 - 我做了一些解构之后得到了。
javascript中的类是一个相对较新的概念,来自java背景的程序员 - 最好以他们熟悉的方式解释解释。 请赐教,因为我一定会犯错误,错过重要点作为新手。
答案 0 :(得分:1)
原型继承:
对象可能是另一个对象的原型。我们可以通过设置原型([[proto]])属性来做到这一点:
var parent={
name:"example"
}
var child={
age:16
}
Object.setPrototypeOf(child,parent);
但为什么Prototypes有用呢?让我们考虑两种情况:
我们设置了一个Object的属性:
我们尝试获取某个属性的值:
检查当前对象是否具有该属性,如果是,则返回其值,如果不是,则继续
当前对象设置为Objects原型,重复步骤1
如果Object.prototype没有定义(我们达到某种全局对象),则返回undefined
现在让我们以上面的代码为例:
child.name;//"example" as its part of the prototype
child.age;//its own property
parent.name;//"example"
parent.age;//undefined
当我们设置属性时:
child.name="child";
child.name;//child
parent.name//example
那就是继承基本上如何运作。它容易而且不太难。要创建一个Instance,我们可以使用Object.create,或者我们可以使用setPrototypeOf,如上面的例子所示(它非常新):
var child=Object.create(parent);//creates a new empty object with parent as prototype
高级原型设计:
但是上层代码缺少什么?好吧,我们想要构造函数! 所以我们可以简单地创建一个用原型集组装一个Object(称为工厂函数)的函数:
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
}
然而,这并不是非常简单,这就是为什么引入新的构造函数。
确实如此:
使用 function.prototype 作为原型创建一个新对象
使用此作为新对象
3:返回新对象
e.g:
function parent(){
this.some="test";
}
parent.prototype={
name:"example";
}
var child=new Parent();
child.some;//own value test
child.name;//inherits from parent.prototype
原型链是:
child -> parent.prototype -> Object -> null
JS中的类继承
JS中没有类继承。这只是一种类语法,它提供了另一种创建原型继承的方法。
答案 1 :(得分:0)
以下是我的观察 - 。启发我,因为我目前缺乏很多学习,需要变得更好。
CLASS:
1.功能和变量的结合。
2.他们的内容可以使用' extend'继承。关键字。
3.我们有父类,子类。
4.对象是使用构造函数(即函数)创建的东西。
5.对象继承了构造函数来自的类的所有功能。
6.对象继承了对变量,类中存在的函数进行处理的能力。
7.对象可以继承另一个类的权力,即除了自己的恩人(= class)之外的其他类。
8.一个班级本身没有权力 - 它可以被简单地描述为给予一群人的名字"或文明。仅出于外交原因需要这个名字 例如:"延伸" ing。 除此之外,做任何事情的所有权力都存在于变量和函数中。原型:
1.原型是一个对象 - >一个最初属于Object的对象。 是的,"一开始只有一个功能"", 而且 - 其余的JavaScript函数都是它的后代。
2.一个函数也可以是一个构造函数",它通常被称为"一个内置对象"。
3.方法只不过是与函数结合的变量/属性/对象。
4.原型只是一个包含函数,更多属性的属性。它描述了属性如何变成"不仅仅是属性" -it成为对象。
5.但是这个对象"原型"你看,它是特别的。明智的旧对象提供给所有内置的,用户定义的函数,自由运用其内容的对象,以及它的继承能力。