在js中创建方法的问题

时间:2013-06-17 07:50:38

标签: 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>

问题:

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

2 个答案:

答案 0 :(得分: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; };

答案 1 :(得分:0)

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