var x = {
name: "japan",
age: 20
}
x.prototype.mad = function() {
alert("USA");
};
x.mad();
上述代码无法正常工作。对象字面量无法扩展?还是
x.mad()
不是正确的调用方式。var x = {
name: "japan",
age: 20
}
x.prototype.mad = function() {
alert("USA");
};
x.mad();
x.mad()
不是正确的调用方式。你不能用这种方法。要使用它的prototype
定义对象方法和属性,必须将对象类型定义为构造函数,然后使用new
运算符创建其实例。
function MyObj() {}
MyObj.prototype.foo = function() {
// ...
}
var myObj = new MyObj();
myObj.foo()
如果您想继续使用对象字面量,唯一将行为附加到对象的方法是创建其属性作为匿名函数,如下所示:
var myObj = {
foo: function() {
// ...
}
}
myObj.foo();
foo
。x.constructor.prototype.mad = function() {
alert("USA");
};
x.mad();
顺便说一下,这也可以工作:
Object.prototype.mad = function() {
alert("USA");
}
var x = {
name: "japan",
age: 20
}
x.mad();
mad
函数将成为任何对象的一部分,无论是字面量、"class"实例,还是数组(它们的typeof === "object"
)。因此,您可能永远不想以这种方式使用它。我认为值得一提,所以我添加了这个答案。x.prototype.mad = function() {
使用:
x.mad = function() {
这只是向对象添加一个mad
属性。
你只能在function对象上使用.prototype
,其他任何对象都不支持。因此,你的下面代码会出现错误:TypeError: Cannot set property 'mad' of undefined
x.prototype.mad = function() {
alert("USA");
};
x.mad = function() {
alert("USA");
}
prototype
是什么以及它的工作原理,我建议看一下**这篇SO文章**。但是,prototype
不能像这样使用对象字面量。 - Cerbrus