第一个例子:
function Animal(name) {
// Instance properties can be set on each instance of the class
this.name = name;
this.speak = function() {
console.log("My name is " + this.name);
}
}
var animal = new Animal('Petname1');
animal.speak();
function Cat(name) {
Animal.call(this, name);
}
Cat.prototype = new Animal();
var cat = new Cat('Petname2');
console.log(cat.speak());
第二个例子:
function Animal(name) {
// Instance properties can be set on each instance of the class
this.name = name;
}
Animal.prototype.speak = function() {
console.log("My name is " + this.name);
};
var animal = new Animal('Petname1');
animal.speak();
function Cat(name) {
Animal.call(this, name);
}
Cat.prototype = new Animal();
var cat = new Cat('Petname2');
console.log(cat.speak());
在第一个示例中,我直接添加到类中,在第二个示例中,我通过prototype
添加。有什么不同?输出是一样的。
答案 0 :(得分:2)
首先,您必须了解presentViewController
如何处理Javascript,而link对此有一个很好的解释。
基于此,两种方法之间的差异是在创建新动物和猫时创建的adaptivePresentationStyleForPresentationController:traitCollection
函数的数量。
第一种方法的实例编号UIModalPresentationNone
与new
和speak
相同。然而,无论您实例化了多少猫和动物,第二种方法都只有一个speak
功能。请查看以下代码段。
在这一点我们可以看到两个Animal实例的'speak'函数是不同的。
Cat
分配给原型我们可以看到它对两个实例是相同的。
Animal
答案 1 :(得分:0)
在第一个示例中,speak()
附加到创建的每个Animal对象。您可以在运行时更改对象的speak()
行为,只会对该特定对象执行此操作。
但是,第二个示例已定义speak()
一次,如果通过Animal.prototype.speak
分配更改了所有对象,则所有对象都将获得更新版本。