扩展对象文字

时间:2014-09-24 11:00:10

标签: javascript prototype object-literal

var x = {
    name: "japan",
    age: 20
}
x.prototype.mad = function() {
    alert("USA");
};
x.mad();

上述代码不起作用。 对象文字不能扩展?或x.mad()不是正确的致电方式。

4 个答案:

答案 0 :(得分:3)

你不能这样做。为了能够使用它prototype定义对象方法和属性,您必须将对象类型定义为构造函数,然后使用new运算符创建它的实例。

function MyObj() {}
MyObj.prototype.foo = function() { 
    // ... 
}

var myObj = new MyObj();
myObj.foo()

如果要继续使用对象文字,将行为附加到对象的唯一方法是将其属性创建为匿名函数,如此

var myObj = { 
    foo: function() { 
       // ...
    }
}

myObj.foo(); 

后一种方式是最快的。第一种是在同一类型的多个对象之间共享行为的方式,因为它们将共享相同的原型。后一种方法为您创建的每个对象创建一个函数foo的实例。

答案 1 :(得分:0)

放弃prototype
替换:

x.prototype.mad = function() {

使用:

x.mad = function() {

这只是向对象添加mad属性。

答案 2 :(得分:0)

function个对象外,您没有.prototype可用的内容。因此,您的以下代码本身会因错误TypeError: Cannot set property 'mad' of undefined

而失败
x.prototype.mad = function() {
    alert("USA");
};

如果需要使用原型和扩展,则需要使用函数对象和新关键字。如果您只想向对象添加属性。直接在对象上分配它,如下所示。

x.mad = function() {
     alert("USA");
}

答案 3 :(得分:0)

x.constructor.prototype.mad = function() {
   alert("USA");
};
x.mad();