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;
您可以在以下链接中找到更多信息:


prototype属性是在类名上调用的,而不是在对象名上调用的。因此,如果项是MyClass类的对象,那么您应该编写:

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