理解javascript中的原型
understanding Prototype in javascript
可能重复:
JavaScript.protype是如何工作的?
来自Java背景,我正在努力理解javascript。
请告诉我这些是否正确。
- 与java一样,有一个至高无上的Object,所有其他对象都从中继承
- 原型属性就像一个指向父对象(java中的类)的指针
- 对于"Object"对象,原型为null
- prototype属性的值是表示对象命名法的字符串,而不是像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'
CCD_ 9返回对象CCD_。这是一个空对象;节点将其显示为CCD_ 11。它不是字符串。事实上,对象可以分配给多个变量。对象没有绑定变量,因此在设计中根本不可能获得字符串。要检查相等性,可以执行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的早期阶段,您需要了解的就是这些。
首先,IMO,不要从节点开始。如果您还不知道javascript,Node会把您拖入流沙池。其次,当我从基于函数的代码开始,然后是OO,然后才转向原型。但如果你真的想知道,这个问题已经在这里得到了回答。如果你还有任何问题,请随时问我!
- 使用“;这个“;JavaScript原型方法中的关键字
- 如何从对象的原型方法访问JavaScript对象属性
- Node.js中的JavaScript原型对象效率
- 为什么要返回'这'在导致循环的JavaScript原型中
- 原型和用法 Javascript
- JavaScript对象不是从原型链继承的
- javascript对象原型与jquery冲突
- 原型Javascript中的错误“;类别“-不是函数和未定义的变量
- 从字符串原型javascript获取字符串值
- 原型JavaScript Event.observe-如何观察可能存在或不存在的元素
- 与原型javascript冲突
- 为什么原型JavaScript在这种情况下不起作用
- 使用原型JavaScript - 最佳实践
- 添加到另一个原型实例的原型:JavaScript
- 函数.原型Javascript
- 如何在选定的原型javascript中更新基于第一选择框的第二选择
- 原型Javascript框架-获取PHP响应
- 如何访问类原型Javascript中定义的事件处理程序中的类成员变量
- 原型 javascript 不显眼的点击事件添加到按钮
- 字符串vs数组原型Javascript