操纵JS原型

时间:2014-01-25 01:56:02

标签: javascript

我想在我的所有对象中添加一个$ error元素,包括“原始”对象,如字符串和数字。

我有以下codepen,它只是将这个值(通过函数)添加到Object类。

http://codepen.io/anon/pen/nglbL

为方便起见,这里是代码: -

Object.prototype.setError = function (str) {
  this.$error = str;
  this.$errorObj = { };
  console.log("value of object is " + this.toString());
  console.log("Setting error to " + this.$error);  
}; 
Object.prototype.getError = function() { 
  console.log("error is " + this.$error);
  console.log("error object is " + this.$errorObj);
  return this.$error;
}
var obj = { 
    "str" : "string me!",
    "bool" : true,
    "int" : 1 
}

obj.str.setError("error");

console.log("Retriving error and it is " + obj.str.getError());

显然,我不明白原型继承是如何工作的。

感谢。

1 个答案:

答案 0 :(得分:2)

在JavaScript中,原语由Object对象包装在后台,这些对象称为“包装对象”,每次将原语视为对象时,都会创建一个新的包装器对象。此过程透明地发生,并且包含字符串基元的变量不保存对象的引用,而是文本字符串值。 包装器对象不能存活多次使用!所以,不要试图为字符串,布尔值和数字定义属性,这根本不起作用。

var a = {}; //this is a common object
a.test = "abc"; 
console.log(a.test);//will print "abc"

var b = "zzzz"; //declaring a string primitive
b.test = "abc"; //trying to add a property to this string, we're treating our primitive as an object
console.log(b.test);//will print undefined