Javascript 原型 属性 : 基于原型的继承

Javascript Prototype property : Prototype based Inheritance

我对 Javascript 的原型 属性 感到困惑。 请参阅下面的代码。

var s = 12;
var s1 = new String();

console.log(s.constructor);  // Outputs: Number() { [native code] } 
console.log(s instanceof String); // Outputs: false
console.log(s instanceof Object); // Outputs: false
//console.log(toString() in s);   
console.log(s.isPrototypeOf(Object)); // Outputs: false
//console.log(s.prototype.isPrototypeOf(Object));

console.log(s.hasOwnProperty ("toString")); // Outputs: false

console.log(s.toString()); // // Outputs: 12
// My Question is how does toString() function is been called, where does it falls int the prototype chain. Why is it not showing undefined.

console.log(s1.constructor); // Outputs: Number() { [native code] } 
console.log(s1 instanceof String); // Outputs: true

我了解到,当我们使用上面的{}或构造函数(new String())创建对象时,它继承自Object.prototype。这就是 console.log(s1 instanceof String); // Outputs: true 的原因,因此我们能够在 s1 上调用 toString() 。但是我对 var x = "someString" or var x = something.

的情况感到困惑

感谢您的宝贵时间。

字符串原始值(如 "hello world")和字符串对象之间存在差异。原始类型——字符串、数字、布尔值——不是对象。

当原始值像对象一样使用时,使用.[]运算符,运行时通过相应的构造函数隐式地将值包装在对象中(StringNumberBoolean)。原始值没有属性,但由于自动换行,您可以执行类似

的操作
var n = "hello world".length;

而且有效。