4
<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>

问题:

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

4

2 回答 2

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);

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

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; };
于 2013-06-17T08:07:39.183 回答
0

Object原型添加一个函数将使该函数在每个 javascript 对象上都可用。( console.log(window.howSweetAmI))。将其移动到mango将使其成为该单个对象的属性。

于 2013-06-17T07:53:37.663 回答