【发布时间】:2014-01-03 18:58:11
【问题描述】:
我试图更好地理解 javascript 中的继承。我的目标是编写一个函数来声明一些变量并设置一个环境,以便其他函数可以基于它构建。我有点像 Ruby 中的 mixins 思路。这是一个不起作用的简单示例。
function baseFunction(){
this.my_var = "hello world";
};
function speakMessage(){
alert(this.my_var);
}
speakMessage.prototype = baseFunction();
speakmessage();
我想如果我将原型设置为 baseFunction,那么将在 baseFunction 中搜索任何在 speakMessage 函数中找不到的属性。这不对吗?我该如何让它发挥作用?
【问题讨论】:
-
你知道什么是闭包吗?
-
这段代码并没有像你想象的那样做。当您调用
baseFunction()时,this实际上将是window!您需要使用new关键字。speakMessage.prototype = new baseFunction();,然后是new speakMessage(); -
这是一个有趣的主题,原型的组合。我习惯于使用 new .... 有人知道我可以在哪里进一步了解它吗?
-
下面的答案可以帮助你理解如何使用构造函数创建实例,以及一个构造函数如何通过原型和调用
Parent.apply(this,arguments);stackoverflow.com/a/16063711/1641941从另一个构造函数继承 -
@NetaMeta 你是对的,如果你想用speakMessage继承baseFunction,你应该使用new。当前将 speakMessage.prototype 设置为 baseFunction (=undefined) 的结果将设置 window.my_var (因为调用 baseFunction 时使用 window 作为调用对象),稍后会发出警报“Hello World”,因为 speakMessage 是使用
window作为调用对象调用的。与从 baseFunction 继承任何内容的 speakMessage 无关。
标签: javascript