Javascript中的原型

ajs*_*sie 5 javascript

虽然我已经阅读了很多关于它的内容,但我无法理解原型概念.

为什么有StringString.prototype

如果我有"cat":

  • 那是一个String还是一个Object
  • 它是否从String或继承了所有属性/方法String.prototype
  • 为什么有StringString.prototype
  • 我应该调用String String对象和String.prototypeString原型吗?

请清楚这一点.

CMS*_*CMS 10

我正在回答这个问题,因为这个主题有很多错误的信息:

那是一个字符串还是一个对象?

"cat"原始字符串值:

typeof "cat"; // "string", a String value
"cat" instanceof String; // false


typeof new String("cat"); // "object", a String object
new String("cat") instanceof String; // true
Run Code Online (Sandbox Code Playgroud)

我稍后会谈到类型和原始值.

它是否从String或String.prototype继承所有属性/方法?

好吧,当你使用属性访问器操作符(点或括号表示法)时,原始值在内部隐式转换为对象,因此所有方法String.prototype都可用,例如:

当您访问:

"cat".chatAt(0);
Run Code Online (Sandbox Code Playgroud)

在幕后"cat"将转换为对象:

Object("cat").chatAt(0);
Run Code Online (Sandbox Code Playgroud)

这就是您可以访问值的所有继承属性的原因.

为什么有String和String.prototype?

String是一个构造函数,允许您创建String对象或进行类型转换:

var stringObj = new String("foo"); // String object

// Type conversion
var myObj = { toString: function () { return "foo!"; } };

alert(String(myObj)); // "foo!"
Run Code Online (Sandbox Code Playgroud)

String.prototype对象是String对象实例继承的对象.

我知道它很混乱,我们有String值和String对象,但大多数时候你实际上只使用字符串值,现在不要担心String对象.

我应该调用String的String对象和String.prototype的String原型吗?

你应该调用String " String构造函数".

"字符串原型"没问题.

你应该知道,"一切是不是一个对象".

我们来谈谈类型,指定了五种语言类型:

  • 布尔
  • 空值
  • 未定义

一个原始值是"也就是直接在语言实现的最低水平所代表的数据"的信息,最简单的一块,你可以有.

先前描述的类型的值可以是:

  • 空:价值null.
  • 未定义:值undefined.
  • 编号:所有数字,如0,3.1416,1000,等.此外NaN,和Infinity.
  • 布尔值:值truefalse.
  • String:每个字符串,例如"cat""bar".