どこでも機能する正気の方法では不可能です。投稿した例では、これらのプロパティのアクセサーを定義する必要があり、それは最新の JS エンジンでのみ機能します。
とにかく、実際にこれを行うコードは次のとおりです。ただし、これを実際のアプリケーションで使用しないでください。より良い解決策については、最後のコード ブロックを参照してください
function fname(message) {
var obj = {};
Object.defineProperty(obj, 'alert', {
get: function() {
alert(message);
}
});
Object.defineProperty(obj, 'cons', {
get: function() {
console.log(message);
}
});
return obj;
}
これfname('hello').alert
が機能するのは、プロパティの getter 関数が実行されるためです。このような関数は通常、値を返す必要がありますが、メッセージを表示alert
するなどの処理を停止するものは何もありません。alert()
ただし、どこでも機能する方法で達成できることは、次のようなものです。
fname('text').alert();
fname('text').cons();
これは次のように実行できます。
function fname(message) {
return {
alert: function() {
alert(message);
},
cons: function() {
console.log(message);
}
}
}