什么是"原型"通过JavaScript中的Object Literal Notation创建的对象的链接?

时间:2015-04-01 11:25:14

标签: javascript

我在Stack Overflow上的第一篇文章,所以这里有一个完整的新手,我仍然习惯于在这个论坛上遵循的规则/注释,所以请原谅这个有抱负的"开发人员" ; - )

在阅读Crockford" Good Parts "时,我遇到了一条说:

  

每个对象都链接到一个原型对象,它可以从中继承属性。从对象文字创建的所有对象都链接到Object.prototype,这是一个JavaScript标准的对象。

为了测试这个,我编写了以下JScript代码:

var Student = {}
console.log(Student.isPrototypeOf(Object.prototype))

注意:

  1. 我正在通过浏览器控制台执行此操作,因此功能 - console.log(...)
  2. 我猜测这里声明的Student变量的方式是使用" Object Literal Notation "。这不正确吗?
  3. 所以第二行 -

    console.log(Student.isPrototypeOf(Object.prototype))
    

    返回 false 而不是 true 。不应该显示 true 而不是 false

    这与我上面提到的书中的界限相矛盾吗?

    所以这是片段在行动 -

    
    
    var Student = {};
    alert(Student.isPrototypeOf(Object.prototype));
    
    
    

    我确信我在这里遗漏了一些东西!

2 个答案:

答案 0 :(得分:3)

Student(以及通过object initialiser创建的所有其他对象)的原型是Object.prototype

  

我猜测这里声明的Student变量使用“Object Literal Notation”的方式。这不正确吗?

是的,这就是它的一个词。规范将其称为对象初始化。*

  

所以第二行 -

     

console.log(Student.isPrototypeOf(Object.prototype))

     

返回false而不是true。不应该显示真实而不是虚假吗?

不,因为Student不是Object.prototype的原型;反过来说:

var student = {};
snippet.log(Object.prototype.isPrototypeOf(student)); // true
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


附注:JavaScript中的压倒性惯例是仅使用带有构造函数的首字母大写字母的混合大小写,有时还用作伪名称空间的对象。简单对象和简单函数按惯例以小写字母开头(因此,student而不是Student)。


出于某种原因,

*“initialiser”带有“s”,而不是“z”。 Eich是一个美国人,但无论是谁编写规范的人都是英国人,或者ECMA最初是一个主要的欧洲组织 - 直到1994年它仍然是欧洲计算机制造商协会 - 也许他们的编辑只是坚持英国而不是美国英语拼写。

答案 1 :(得分:0)

你有倒退的关系。

Object.prototype.isPrototypeOf(Student) // true

Student instanceOf Object // true