JavaScript-将一种方法应用于多个对象
我听说过将一个函数或变量应用于多个对象的原型方法。但不知怎么的,它对我不起作用。我创建了许多类似这样的对象:JavaScript-将一种方法应用于多个对象,javascript,object,prototype,undefined,Javascript,Object,Prototype,Undefined,我听说过将一个函数或变量应用于多个对象的原型方法。但不知怎么的,它对我不起作用。我创建了许多类似这样的对象: var item = { a: { aa: "lalala", ab: 1, something: 3 }, b: { ba: "jfjb", bb: 2, something: 4 } } 但是当我知道如何使用原型方法时 item.prototype.bob = 2; 它不工作,并向我显示错误 无法设置未定义“”的属性
var item = {
a: {
aa: "lalala",
ab: 1,
something: 3
},
b: {
ba: "jfjb",
bb: 2,
something: 4
}
}
但是当我知道如何使用原型方法时
item.prototype.bob = 2;
它不工作,并向我显示错误
无法设置未定义“”的属性“bob”
方法也是如此
item.prototype.bob = function() {
100 - this.something;
this.something++;
}
你知道我做错了什么吗?或者有不同的方法将相同的变量或函数应用于许多对象吗?原型属性是在类名上调用的,而不是在对象名上调用的。因此,如果项是MyClass类的对象,那么你应该写:
MyClass.prototype.bob = 2;
您可以在以下链接中找到更多信息:
MyClass.prototype.bob = 2;
您可以在以下链接中找到更多信息:
function item(a,b){
this.a=a;
this.b=b;
}
function a(aa,ab,something){
this.aa=aa;
this.ab=ab;
this.something=something
}
item.prototype.bob=2;
item.prototype.method1 = function() {
100 - this.something;
this.something++;
}
希望这对您有所帮助。这里您的项本身就是一个对象,它没有任何构造函数,因此您无法定义或设置原型。您的代码会抛出错误 要解决这个问题,它必须像下面这样
function item(a,b){
this.a=a;
this.b=b;
}
function a(aa,ab,something){
this.aa=aa;
this.ab=ab;
this.something=something
}
item.prototype.bob=2;
item.prototype.method1 = function() {
100 - this.something;
this.something++;
}
希望这有助于您将类与对象实例混淆。您只有一个匿名对象。
项
是实例,而不是类
在下面的代码段中,声明了一个类(Item
,大写为i),创建了一个实例(Item
),并修改了该类的原型。您将看到,如果愿意,可以在原型上设置一个属性并通过实例读取它
var Item=function(){
a={
aa:“拉拉”,
ab:1,
某物:3
};
b={
ba:“jfjb”,
bb:2,
某物:4
};
}
var item=新项();
Item.prototype.bob='x';
警报(item.bob);
您将类与对象实例混淆。您只有一个匿名对象。item
是实例,而不是类
在下面的代码段中,声明了一个类(Item
,大写为i),创建了一个实例(Item
),并修改了该类的原型。您将看到,如果愿意,可以在原型上设置一个属性并通过实例读取它
var Item=function(){
a={
aa:“拉拉”,
ab:1,
某物:3
};
b={
ba:“jfjb”,
bb:2,
某物:4
};
}
var item=新项();
Item.prototype.bob='x';
警报(item.bob);
经典方法是
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Person.prototype.greet = function() {
console.log(this.firstName + " says hello");
}
var pete = new Person("Peter", "Pan");
pete.greet();
请注意,prototype属性位于构造函数上(我们使用new
调用函数对象来构造对象),而不是构造对象本身
在ECMAScript 6中,您将能够以更简洁的方式编写:
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
greet() {
console.log(this.firstName + " says hello");
}
}
new Person("Peter", "Pan").greet();
经典的方法是
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Person.prototype.greet = function() {
console.log(this.firstName + " says hello");
}
var pete = new Person("Peter", "Pan");
pete.greet();
请注意,prototype属性位于构造函数上(我们使用new
调用函数对象来构造对象),而不是构造对象本身
在ECMAScript 6中,您将能够以更简洁的方式编写:
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
greet() {
console.log(this.firstName + " says hello");
}
}
new Person("Peter", "Pan").greet();
问题不在于您指定的类型,而在于
项的类型。因此项。prototype
是未定义的。并且您不能在未定义的上调用.bob
。问题不在于您指定的类型,而在于项的类型。因此项。prototype
是未定义的。您可以不要在未定义的上调用.bob
。