了解JavaScript中的原型

可能重复:
JavaScript .prototype如何工作?

来自Java背景,我想了解JavaScript。

请让我知道这些是否正确。

  • 像在java中一样,有一个最高级对象,所有其他对象都从中继承。
  • prototype属性就像一个指向父对象的指针(java中的类)
  • 对于“对象”对象,原型为空。
  • 原型属性的值是表示对象命名的字符串,并不像C中的指针。指针概念使用隐藏属性[[PROTOTYPE]]实现,该属性在脚本中无法访问。
  • 我使用node.js而不是浏览器来学习JS。 我试过了,

    var human = Object.create(null);  // same as var human;
    console.log(Object.getPrototypeOf(human)); //null
    
    var man  = Object.create(human);
    console.log(Object.getPrototypeOf(man));
    //{}
    //expected 'human'
    
    var person = Object.create(Object.prototype); // same as var person = {}
    console.log(Object.getPrototypeOf(person));
    //{}
    //expected 'object'
    

  • 是的,除了Object.create(null) ,它不从任何东西继承。
  • 不确定“父对象”是什么,但函数的原型由实例可访问的函数组成。 因为Object.prototype.toString存在, {}.toString也是如此,所以它是继承的。
  • 是的,原型链在此结束。
  • 否, .prototype (或Object.getPrototypeOf返回的值)是可以使用属性扩展的对象,以便这些属性由实例继承。
  • 你的例子:

    var human = Object.create(null);  // same as var human;
    

    不,它会创建一个不会从任何东西继承的空对象。 var human;human设置为undefined - 这不是一个对象,而是一个原始值(并非所有东西都是JavaScript中的一个对象)。

    var man  = Object.create(human);
    console.log(Object.getPrototypeOf(man));
    //{}
    //expected 'human'
    

    Object.getPrototypeOf(man)返回human对象。 这是一个空洞的对象; 节点将其显示为{} 。 它不是一个字符串。 事实上,对象可以分配给多个变量。 一个对象没有绑定的变量,所以设计上根本不可能获得一个字符串。 为了检查相等性,你可以做Object.getPrototypeOf(man) === human ,它产生true

    var person = Object.create(Object.prototype); // same as var person = {}
    console.log(Object.getPrototypeOf(person));
    //{}
    //expected 'object'
    

    这确实与{}是一个直接从Object继承的空对象。 如上所述,原型是Object.prototype而不是字符串。 它看起来是空的,但这是因为Object.prototype的函数默认是可用的并且是隐藏的。


    首先,您需要在尝试使用它之前阅读有关create方法。

    其次,按以下方式调用对象:

    var human = {}, man = {}, person = {};
    

    第三,这不是Java。 在Java类和对类的理解是非常重要的。 原型在JavaScript中是完全可选的。 原型提供的唯一性能优势来自于代码在不同范围内通过引用大量重用函数。 如果这种编码方式不适用于您,那么您可能不需要使用原型。

    原型是从父项或某个祖先对象继承的。 JavaScript解析器将首先查找本地分配,如果不存在,则将检查当前对象的原型是否存在已命名的引用。 简而言之,在编写JavaScript的这个早期阶段你需要知道的一切。


    首先,国际海事组织,不要开始与节点。 如果您还不知道JavaScript,节点会将您拖入一堆流沙中。 其次,当我开始使用基于功能的代码时,然后是OO,然后才转向原型。 但如果你真的想知道,这个问题已经在这里回答了。 随时问我是否有任何问题!

    链接地址: http://www.djcxy.com/p/30079.html

    上一篇: understanding Prototype in javascript

    下一篇: How to handle javascript object