Javascript中的原型

时间:2010-11-10 07:44:38

标签: javascript

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

为什么有StringString.prototype

如果我有"cat"

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

请明确这一点。

2 个答案:

答案 0 :(得分: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

稍后我将讨论类型和原始值。

  

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

好吧,当你使用property accessor operator(点或括号表示法)时,原始值在内部隐式转换为object,因此String.prototype上的所有方法都可用,例如:

访问时:

"cat".chatAt(0);

幕后"cat"转换为对象:

Object("cat").chatAt(0);

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

  

为什么有String和String.prototype?

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

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

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

alert(String(myObj)); // "foo!"

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

我知道这很令人困惑,我们有String值和String对象,但大多数时候你实际上只使用字符串值,现在不用担心String对象。

  

我应该在String对象中调用String吗?在String原型中调用String.prototype吗?

您应该致电String "The String constructor"

“String prototype”没问题。

你应该知道“一切都一个对象”。

让我们谈谈类型,指定了五个language types

  • 字符串
  • 布尔
  • 未定义

primitive value是“直接在语言实现的最低级别表示的数据”,这是您可以拥有的最简单的信息。

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

  • Null:值null
  • 未定义:值undefined
  • 数字:所有数字,例如03.14161000等。还有NaNInfinity
  • 布尔值:值truefalse
  • 字符串:每个字符串,例如"cat""bar"

答案 1 :(得分:3)

字符串是JavaScript中的对象。没有像PHP,C或其他语言那样的称为字符串的真实数据类型。

String.prototype是一个向所有String-Objects添加功能的构造。如果您希望所有字符串都提供转换功能,请执行以下操作:

String.prototype.convert = function () {
   // Put your code in here
}

// Set up y new String
var example = "cat";

// Now you can call your function
example.convert();