尽管我已经阅读了很多关于它的内容,但我无法理解原型概念。
为什么有String
和String.prototype
?
如果我有"cat"
:
String
还是Object
?String
或String.prototype
?String
和String.prototype
?String
对象和String.prototype
String原型吗?请明确这一点。
答案 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
。undefined
。0
,3.1416
,1000
等。还有NaN
和Infinity
。true
和false
。"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();