【发布时间】:2015-10-12 04:39:08
【问题描述】:
我真的不明白伪经典和原型继承之间的区别。看看下面的代码 sn-p。
原型:我能够理解这段代码(Douglas Crockford)。我有 更改了类名并添加了实现以便更好地理解,因为他的代码块在presentaiton中不完整。
var baseObject = {
a : "old",
firstMethod: function () {alert("First method");},
secondMethod: function () {alert("Second method");}
};
var derivedObject = Object(baseObject);
alert(derivedObject.a);
derivedObject.thirdMethod = function () {alert("Third method");};
var derivedChildObject = Object(derivedObject);
derivedChildObject.firstMethod();
derivedChildObject.secondMethod();
derivedChildObject.thirdMethod();
伪经典:
由于方法不完整,我在他的演示文稿中没有从相同的代码 sn-p 中获得清晰,我去了互联网上的其他链接
http://javascript.info/tutorial/pseudo-classical-pattern
function Animal(name) {
this.name = name
}
Animal.prototype = {
canWalk: true,
sit: function() {
this.canWalk = false
alert(this.name + ' sits down.')
}
}
var animal = new Animal('Pet') // (1)
alert(animal.canWalk) // true
animal.sit() // (2)
alert(animal.canWalk) // false
伪类的方案:
方法和默认属性在原型中。 原型中的方法使用 this ,它是当前对象,因为 this 的值只取决于调用上下文,所以 animal.sit() 会将 this 设置为 animal。
你能帮我提供正确的例子吗?您可以将 - Animal 用例或 baseObject 用例作为参考或提出您自己的示例
【问题讨论】:
-
第二个例子“伪经典”不包括继承。继承仍然是原型......
-
如果你提供伪经典的例子和简单的例子会很棒
-
@devnull69 澄清一下:你的意思是在 javascript 中,所有继承都是原型的吗?
-
@user2808054 正确