类和原型。新手如何解释它们

时间:2017-05-24 13:47:15

标签: javascript java c++ class prototype

来自C ++的背景,java-I确实对类有一点了解。但用原型替换类(如在javascript中)似乎是一个完全不同的思维过程。 对于像我这样的新手来说,这可能真的很难掌握 - 所以我将展示自己的观察 - 我做了一些解构之后得到了。

javascript中的类是一个相对较新的概念,来自java背景的程序员 - 最好以他们熟悉的方式解释解释。 请赐教,因为我一定会犯错误,错过重要点作为新手。

2 个答案:

答案 0 :(得分:1)

原型继承:

对象可能是另一个对象的原型。我们可以通过设置原型([[proto]])属性来做到这一点:

var parent={
  name:"example"
}

var child={
  age:16
}

Object.setPrototypeOf(child,parent);

但为什么Prototypes有用呢?让我们考虑两种情况:

  1. 我们设置了一个Object的属性:

    1. 该属性已添加到该对象
  2. 我们尝试获取某个属性的值:

    1. 检查当前对象是否具有该属性,如果是,则返回其值,如果不是,则继续

    2. 当前对象设置为Objects原型,重复步骤1

    3. 如果Object.prototype没有定义(我们达到某种全局对象),则返回undefined

  3. 现在让我们以上面的代码为例:

      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
    }
    

    然而,这并不是非常简单,这就是为什么引入新的构造函数。

    确实如此:

    1. 使用 function.prototype 作为原型创建一个新对象

    2. 使用作为新对象

    3. 调用 function

      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.但是这个对象"原型"你看,它是特别的。明智的旧对象提供给所有内置的,用户定义的函数,自由运用其内容的对象,以及它的继承能力。