在js中创建方法的问题

use*_*256 4 javascript

<script>
var mango =  new Object ();
mango.color = "yellow";
mango.shape= "round";
mango.sweetness = 8;
Object.prototype.howSweetAmI = function () {
console.log("Hmm Hmm Good");
}
console.log(mango); 
</script>
Run Code Online (Sandbox Code Playgroud)

题:

我可以改变这一行: Object.prototype.howSweetAmIto mango.howSweetAmI,并且它们都可以工作.但它们之间有什么区别?通常我们使用哪种方式来创建方法?

Guf*_*ffa 5

通常你不会添加任何内容Object.prototype,因为它会被添加到所有内容中.它可以用于例如"".howSweetAmI(),并且没有多大意义.

通常,您有一个特定类型,您可以在其中向原型添加方法,例如:

function Fruit(color, shape, sweetness) {
  this.color = color;
  this.shape = shape;
  this.sweetness = sweetness;
}

Fruit.prototype.howSweetAmI = function() {
  return this.sweetness;
};

var mango = new Fruit("yellow", "round", 8);
Run Code Online (Sandbox Code Playgroud)

将方法添加到原型意味着所有实例都使用相同的方法.如果将方法作为属性添加到实例,则只有该实例具有该方法,并且不同的实例可以具有该方法的不同实现.例如:

var mango = new Fruit("yellow", "round", 8);
var banana = new Fruit("yellow", "bent", 70);

mango.howSweetAmI = function() { return this.sweetness; };
banana.howSweetAmI = function() { return this.sweetness * 0.1; };
Run Code Online (Sandbox Code Playgroud)