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
的实例。
丢掉prototype
。
替换:
x.prototype.mad = function() {
有了:
x.mad = function() {
这只是增加了一个mad
属性的对象。
您没有.prototype
可用于除function之外的任何对象。所以,你的下面的代码本身失败,错误TypeError: Cannot set property 'mad' of undefined
x.prototype.mad = function() {
alert("USA");
};
如果您需要使用的原型和扩展,你需要使用函数对象和新的关键词。如果你只是想添加属性到你的对象。直接在对象上指定它,如下所示。
x.mad = function() {
alert("USA");
}
这也适用,顺便说一句:
Object.prototype.max = function() {
alert("USA");
}
var x = {
name: "japan",
age: 20
}
x.mad();
但随后,的mad
功能将任何部分反对什么那么, 文字,“下课”的情况下,也阵列(他们有typeof === "object"
)。 所以 - 你可能永远不会想这样使用它。我认为这值得一提,所以我添加了这个答案。
谢谢,它的原型不适用。 – user3763367 2014-09-24 11:04:29
现在我的问题是,原型不适用于使用对象字面量创建的对象吗? – user3763367 2014-09-24 11:05:31
关于'prototype'是什么以及它是如何工作的解释,我建议看看** [在这个SO帖子](http://stackoverflow.com/questions/572897/how-does-javascript -prototype工作)**。 '原型'不适用于像这样的对象文字,没有。 – Cerbrus 2014-09-24 11:09:41