- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
当我接触原型(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()
为什么这不提醒新文本?
最佳答案
‘function cat’只是一个函数。它的原型(prototype)是一个空对象 ({})。可以调用“new cat”将成员“name”和“talk”添加到新对象。在新对象的下方是函数原型(prototype),它仍然是 {}。
var c= new cat('Tiddles');
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: {}
现在,当您写入“cat.prototype.talk”时,您是在向该底层对象添加成员:
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: { 'talk': function() {...} }
直接在实例“c”上设置的“talk”函数优先于在 c 的构造函数原型(prototype)上间接设置的“talk”。
所以你在这里混合了两种继承方式,“this”分配方法和“原型(prototype)”方法。
将方法写入原型(prototype)的优点是您不会将相同成员的冗余副本复制到每个对象实例中;写入实例的优点是它解决了绑定(bind)方法的问题。您选择哪一个取决于您,但不要将两者混用。如果您想走原型(prototype)路线,则只应将“名称”写入“this”,因为这是每个实例特定的唯一属性。
关于JavaScript 原型(prototype)函数没有覆盖原来的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751704/
如何使用 Blazor 在 Linux 平台下运行 Desktop 程序 本文将讲解如何使用 Blazor 运行跨平台应用,应用到的技术有以下几点 Blazor
低并发的友友们好,我是闪客。 Lambda 表达式非常方便,在项目中一般在 stream 编程中用的比较多。 List<Student> studen
我是一名优秀的程序员,十分优秀!