dat*_*.io 7 javascript prototype
当我遇到原型的概念时学习javascript.我成功地为cat类添加了新方法,但未能覆盖原始的talk方法.
function cat(name) {
this.name = name;
this.talk = function() {
alert( this.name + " : I'm a girl!" )
}
}
cat.prototype.talk = function() {
alert( this.name + " : I'm a dude!" )
}
cat1 = new cat("felix")
cat1.talk()
Run Code Online (Sandbox Code Playgroud)
为什么不提醒新文本?
bob*_*nce 16
'功能猫'只是一个功能.它的原型是一个空的Object({}).可以调用'new cat'来向新对象添加成员'name'和'talk'.在新的Object下面将是函数原型,它仍然是{}.
var c= new cat('Tiddles');
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: {}
Run Code Online (Sandbox Code Playgroud)
现在,当您写入'cat.prototype.talk'时,您正在向该基础对象添加成员:
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: { 'talk': function() {...} }
Run Code Online (Sandbox Code Playgroud)
直接在实例'c'上设置的'talk'函数优先于间接在c的构造函数原型上的'talk'设置.
所以你在这里混淆了两种继承风格,'this'赋值方法和'prototype'方法.
将方法编写到原型的优点是,您不会将复制到每个对象实例中的相同成员的冗余副本; 写入实例的优点是它可以解决绑定方法的问题.你选择哪一个取决于你,但不要混淆两者.如果你想去原型路线,只有'name'应写入'this',因为这是唯一一个特定于每个实例的属性.
| 归档时间: |
|
| 查看次数: |
7053 次 |
| 最近记录: |