扩展对象字面量

use*_*367 5 javascript prototype object-literal

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

上面的代码不起作用。对象字面量不能扩展?或x.mad()呼叫方式不正确。

Rom*_*pak 5

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

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

var myObj = new MyObj();
myObj.foo()
Run Code Online (Sandbox Code Playgroud)

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

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

myObj.foo(); 
Run Code Online (Sandbox Code Playgroud)

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