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

时间:2015-09-26 13:55:59

标签: javascript jquery prototype prototypal-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.

的情况感到困惑

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

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

当原始值使用类似对象时,使用.[]运算符,运行时通过相应的构造函数隐式包装对象中的值({{1} },StringNumber)。原始值不具有属性,但由于自动换行,您可以执行

之类的操作
Boolean

它有效。