我知道如何在 C++ 中定义一些东西。例如:
#define ce cout<<"\n";
现在,如果我们使用ce
代码的任何位置,它将输出cout<<"\n";
我正在尝试使用此 JavaSvript:
#define go document.write
所以,如果我想显示/输出一些东西,我想写
go('Great!');
现在,这将Great!
在浏览器中输出。但是这种define
方法在 JavaScript 中不起作用
我知道如何在 C++ 中定义一些东西。例如:
#define ce cout<<"\n";
现在,如果我们使用ce
代码的任何位置,它将输出cout<<"\n";
我正在尝试使用此 JavaSvript:
#define go document.write
所以,如果我想显示/输出一些东西,我想写
go('Great!');
现在,这将Great!
在浏览器中输出。但是这种define
方法在 JavaScript 中不起作用
你不能,至少不能像 C/C++ 那样做。但是,您可以将函数分配给任何变量:
var go = document.write;
document.write
正如所指出的,由于范围的变化,这将不起作用。获得具有正确范围的实际功能的一种解决方案是:
var go = document.write.bind(document);
// Now call
go('Great!');
.bind
无法在 IE8 及更低版本中运行的节点。
另一个选项是 with Object.defineProperty
,它允许您设置不可写、不可配置或不可枚举的东西……特别是在window
对象上(因此有全局访问权限)。尝试这个:
Object.defineProperty(window, "go", {
enumerable: false,
configurable: false,
writable: false,
value: function (msg) {
console.log(msg);
}
});
演示:http: //jsfiddle.net/xm3mT/
您可以使用 ,而不是将 设置value
为匿名函数bind
,例如:
value: console.log.bind(console)
尽管使用我的第一个示例也一样好。
我不确定您是否使用document.write
,但您通常不想使用它...当然,这取决于您。尽管如此,我console.log
只是用作示例。
参考:
Object.defineProperty
文档 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/definePropertyObject.defineProperty
浏览器兼容性 - http://kangax.github.io/es5-compat-table/#Object.definePropertyFunction.prototype.bind
文档 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bindFunction.prototype.bind
浏览器兼容性 - http://kangax.github.io/es5-compat-table/#Function.prototype.bind您使用“var”关键字定义变量。
var name = "Jessica";
您也可以分配一个功能:
var myFunction = function() {
// do something
};
Javascript 是松散类型的,因此您无需指定它是什么类型的变量。
JavaScript 不是编译语言,因此没有与 C++ 等效的define
. 你必须使用变量。但是您可以将函数分配给变量(因为 JavaScript 中的函数是对象)以获得基本相同的结果。