'command' in Google 闭包有原型吗?
Does 'command' in Google Closure have the prototype?
我正在使用 Google 闭包并尝试执行如下操作:
abc.edf.commands.showToast = function() {
abc.edf.commands.showToast.test(); // this works fine
this.test2(); // this will throw an error like:
// exception_logger.js:88 TypeError: this.test2 is not a function
};
abc.edf.commands.showToast.test = function() {
console.log('test');
};
abc.edf.commands.showToast.prototype.test2 = function() {
console.log('test2');
};
我认为 JavaScript 中的每个对象都有 'prototype'。那么是因为 'command' 不是一个对象吗?或者我错过了别的东西?谢谢:)
正如 Felix Kling 评论的那样,您需要使用 new
创建对象才能使用 test2
原型函数。这是一个例子:
goog.provide('abc.edf.commands.showToast');
/** @constructor */
abc.edf.commands.showToast = function() {};
abc.edf.commands.showToast.test = function() {
console.log('test');
};
abc.edf.commands.showToast.prototype.test2 = function() {
console.log('test2');
};
abc.edf.commands.showToast.test(); // static class method
var foo = new abc.edf.commands.showToast();
foo.test2(); // instance method
您可以尝试在 online closure compiler 中输入该代码。这是它使用简单编译编译成的内容:
var abc={edf:{}};
abc.edf.commands={};
abc.edf.commands.showToast=function(){};
abc.edf.commands.showToast.test=function(){console.log("test")};
abc.edf.commands.showToast.prototype.test2=function(){console.log("test2")};
abc.edf.commands.showToast.test();
var foo=new abc.edf.commands.showToast;
foo.test2();
这是它使用高级编译编译的结果:
console.log("test");
console.log("test2");
为了测试,我将编译后的代码保存到文件 "showToast.js" 并制作了一个简单的 html 页面来加载它:
<!doctype html>
<html>
<head>
</head>
<body>
<p>ShowToast Test</p>
<script src="showToast.js"></script>
</body>
</html>
我正在使用 Google 闭包并尝试执行如下操作:
abc.edf.commands.showToast = function() {
abc.edf.commands.showToast.test(); // this works fine
this.test2(); // this will throw an error like:
// exception_logger.js:88 TypeError: this.test2 is not a function
};
abc.edf.commands.showToast.test = function() {
console.log('test');
};
abc.edf.commands.showToast.prototype.test2 = function() {
console.log('test2');
};
我认为 JavaScript 中的每个对象都有 'prototype'。那么是因为 'command' 不是一个对象吗?或者我错过了别的东西?谢谢:)
正如 Felix Kling 评论的那样,您需要使用 new
创建对象才能使用 test2
原型函数。这是一个例子:
goog.provide('abc.edf.commands.showToast');
/** @constructor */
abc.edf.commands.showToast = function() {};
abc.edf.commands.showToast.test = function() {
console.log('test');
};
abc.edf.commands.showToast.prototype.test2 = function() {
console.log('test2');
};
abc.edf.commands.showToast.test(); // static class method
var foo = new abc.edf.commands.showToast();
foo.test2(); // instance method
您可以尝试在 online closure compiler 中输入该代码。这是它使用简单编译编译成的内容:
var abc={edf:{}};
abc.edf.commands={};
abc.edf.commands.showToast=function(){};
abc.edf.commands.showToast.test=function(){console.log("test")};
abc.edf.commands.showToast.prototype.test2=function(){console.log("test2")};
abc.edf.commands.showToast.test();
var foo=new abc.edf.commands.showToast;
foo.test2();
这是它使用高级编译编译的结果:
console.log("test");
console.log("test2");
为了测试,我将编译后的代码保存到文件 "showToast.js" 并制作了一个简单的 html 页面来加载它:
<!doctype html>
<html>
<head>
</head>
<body>
<p>ShowToast Test</p>
<script src="showToast.js"></script>
</body>
</html>