我刚刚开始学习Javascript并正在尝试使用函数。我写下以下认为它会起作用。这样的事情是可能的还是只是错误?
function foo() {
console.log(this.language);
}
foo.language = "English";
foo();
答案 0 :(得分:2)
这是不可能的,因为要获得this
作为当前对象的访问权限,您需要实例化(构造函数)函数,这是调用new
将为您执行的操作。访问this
以获取对当前实例的引用不仅仅是Javascript中的情况;在Java中,this
也无法从静态上下文访问。
您正在寻找的是:
function Foo(language) {
this.language = language;
}
Foo.prototype.log = function(){
console.log(this.language);
}
var bar = new Foo("English");
bar.log();
答案 1 :(得分:1)
您可以使用new
关键字创建 foo 对象( foo 的实例)。然后设置该实例的语言属性。如果 foo 具有输出其语言属性的函数,则可以在实例上调用该函数以查看其语言。
function foo() {
this.outputLanguage = function() {
console.log(this.language);
}
}
var f1 = new foo();
f1.language = "English";
var f2 = new foo();
f2.language = "French";
f1.outputLanguage();
f2.outputLanguage();
在这个例子中,我们制作2个foo对象,并为每个对象分配不同的语言。
foo()
函数是constructor function。我们通常将实例变量的初始值传递给它,如下所示:
function foo(language) {
this.language = language;
this.outputLanguage = function() {
console.log(this.language);
}
}
var f1 = new foo("English");
var f2 = new foo("French");
f1.outputLanguage();
f2.outputLanguage();
答案 2 :(得分:1)
Javascript仅支持原型继承。因此,要将属性(在您的情况下language
是属性)分配给Object(在您的情况下为foo
),您需要使用构造函数。按照惯例,构造函数是用Initcap编写的。
function Foo(lang){
this.language = lang;
}
Foo.prototype.getLanguage = function(){
return this.language;
}
var lang1 = new Foo('english');
var lang2 = new Foo('bengali');
console.log(lang1.getLanguage()); // english
console.log(lang2.getLanguage()); // bengali
答案 3 :(得分:0)
this
可用于实例变量,在您的情况下,名为函数
function foo() {
console.log(foo.language); //instead of this, use function property
}
foo.language = "English";
foo();
如果您想要更多潜水,请查看我的其他answer了解同一主题