Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用prototype关键字向Javascript类添加函数吗?_Javascript - Fatal编程技术网

可以使用prototype关键字向Javascript类添加函数吗?

可以使用prototype关键字向Javascript类添加函数吗?,javascript,Javascript,我需要能够将许多函数添加到Javascript类中,我认为可以使用className.prototype=function(){}来实现这一点,但可能我在这一点上不正确 Car.prototype.toAnotherString = function () { return this.model + " has done " + this.miles + " miles"; }; 问题:这个类中的原型声明正确吗?在没有函数名的情况下,类Car如何声明> function Car

我需要能够将许多函数添加到Javascript类中,我认为可以使用className.prototype=function(){}来实现这一点,但可能我在这一点上不正确

  Car.prototype.toAnotherString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
问题:这个类中的原型声明正确吗?在没有函数名的情况下,类Car如何声明>

function Car( model, year, miles ) {

  this.model = model;
  this.year = year;
  this.miles = miles;

  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };

  Car.prototype.toAnotherString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}

var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );

console.log( civic.toString() );
console.log( mondeo.toString() );
console.log( civic.toAnotherString() );
console.log( mondeo.toAnotherString() );
新代码:

这就是原型的添加方式

function Car( model, year, miles ) {

  this.model = model;
  this.year = year;
  this.miles = miles;

  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}

 Car.prototype.toAnotherString = function () {
    return this.model + " has done " + this.miles + " miles";
 };

不,不是:在
汽车上定义方法的行。原型应单独放置:

function Car (model, year, miles) {
  this.model = model;
  this.year = year;
  this.miles = miles;

  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}

Car.prototype.toAnotherString = function () {
    return this.model + " has done " + this.miles + " miles";
};
请看,原型的主要优点是能够只创建一次方法函数。但是在您的代码中,每次调用
Car
构造函数时都会执行这一行,一次又一次地创建函数的新实例。这违背了原型的目的

但是您可能会问,这个函数如何知道它所调用的对象?这就是所谓的函数上下文欺骗。请参见,当您调用
civic.toatotherstring()
时,在
toatherstring
内部,此
对象将引用与
civic
相同的对象。当您调用
mondeo.toatotherstring()
时,此
将引用与
mondeo
相同的对象

但是等等,还有更多!您可以取消一个对象的此方法,同时传递另一个对象作为其上下文(即,
this
):

而且,你瞧,尽管该方法似乎属于
civic
对象,但实际上它的作用就像是附加在
mondeo
one上一样


这是JS最强大的功能之一,可以在方法内部切换
。我建议学习(真的,没有双关语)关于MDN的教程,以及关于和的相应文章。

不,不是:定义汽车方法的那一行。原型应单独放置:

function Car (model, year, miles) {
  this.model = model;
  this.year = year;
  this.miles = miles;

  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}

Car.prototype.toAnotherString = function () {
    return this.model + " has done " + this.miles + " miles";
};
请看,原型的主要优点是能够只创建一次方法函数。但是在您的代码中,每次调用
Car
构造函数时都会执行这一行,一次又一次地创建函数的新实例。这违背了原型的目的

但是您可能会问,这个函数如何知道它所调用的对象?这就是所谓的函数上下文欺骗。请参见,当您调用
civic.toatotherstring()
时,在
toatherstring
内部,此
对象将引用与
civic
相同的对象。当您调用
mondeo.toatotherstring()
时,此
将引用与
mondeo
相同的对象

但是等等,还有更多!您可以取消一个对象的此方法,同时传递另一个对象作为其上下文(即,
this
):

而且,你瞧,尽管该方法似乎属于
civic
对象,但实际上它的作用就像是附加在
mondeo
one上一样


这是JS最强大的功能之一,可以在方法内部切换
。我建议学习(实际上,没有双关语)关于MDN的教程,以及关于和的相应文章。

原型应该在初始化函数之外完成,如下所示:

function Car( model, year, miles ) {

  this.model = model;
  this.year = year;
  this.miles = miles;

  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}

Car.prototype.toAnotherString = function () {
    return this.model + " has done " + this.miles + " miles";
};

原型应在初始化函数之外完成,如下所示:

function Car( model, year, miles ) {

  this.model = model;
  this.year = year;
  this.miles = miles;

  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}

Car.prototype.toAnotherString = function () {
    return this.model + " has done " + this.miles + " miles";
};

是的,你可以这样做,但是在构造函数内部声明它们会让你在每次创建新实例时都覆盖它。“不使用函数名就可以声明类Car吗”这是什么意思?只是为了澄清术语,javascript中没有类。这里有一个构造函数,它将在关键字“新”使用时创建新的汽车实例。我的意思是,我可以创建一个对象,其中的Word函数更像C++或java风格的代码吗?是的,你可以做到。但是,在构造函数内部声明它们会使它在每次创建新实例时都被覆盖。“在没有函数名的情况下如何声明类Car”这是什么意思?只是为了澄清术语,javascript中没有类。这里有一个构造函数,它将在关键字“新”使用时创建新的汽车实例。我的意思是,我可以创建一个对象,其中的Word函数更像C++还是java风格的代码?我只是快速读取了调用和应用函数,但是我没有真正得到参数列表中有这个的部分。你能解释一下吗?在我的回答中用
call
检查这个例子-因为
mondeo
作为第一个参数传递到那里,所以
mondeo
对象将被认为是
中的
这个
到另一个字符串
而不是
civic
(或其他任何东西).我只是快速阅读了调用和应用函数,但我没有真正了解参数列表中有this的部分。你能解释一下吗?在我的回答中用
call
检查这个例子-因为
mondeo
作为第一个参数传递到那里,所以
mondeo
对象将被认为是
中的
这个
到另一个字符串
而不是
civic
(或其他任何东西)。