waffle
Version:
シンプルなWEBアプリケーションフレームワークです。(ALL YOUR NODE ARE BELONG TO US)
194 lines (177 loc) • 5.27 kB
JavaScript
/*
* Copyright 2012 Katsunori Koyanagi
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
/**
* @overview 言語サポート向けのユーティリティ機能を提供します。
*/
;
/**
* 言語サポート向けのユーティリティ機能を提供します。
*
* @class 言語サポート向けのユーティリティ機能を提供します。
*/
var Lang = {};
/**
* Node.jsのバージョンです。このオブジェクトは、major/minor/revision/buildの4つのプロパティを持ちます。
*/
Lang.nodeVersion = new function() {
var m = process.version.match(/(\d+)/g);
this.major = m ? parseInt(m[0], 10) || 0 : 0;
this.minor = m ? parseInt(m[1], 10) || 0 : 0;
this.revision = m ? parseInt(m[2], 10) || 0 : 0;
this.build = m ? parseInt(m[3], 10) || 0 : 0;
};
/**
* 指定の値がFunction型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} Function型ならtrue
*/
Lang.isFunction = function(obj) {
return toString.call(obj) === "[object Function]";
};
/**
* 指定の値がString型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} String型ならtrue
*/
Lang.isString = function(obj) {
return toString.call(obj) === "[object String]";
};
/**
* 指定の値がNumber型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} Number型ならtrue
*/
Lang.isNumber = function(obj) {
return toString.call(obj) === "[object Number]";
};
/**
* 指定の値がNumber型かつ実数であるかを返します。NaNやInfinityはfalseとなります。
*
* @param {Object}
* obj 値
* @return {Boolean} Number型かつ実数ならtrue
*/
Lang.isReal = function(obj) {
return type.isNumber(obj) && (obj * 0.0 === 0.0);
};
/**
* 指定の値がArray型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} Array型ならtrue
*/
Lang.isArray = function(obj) {
return Array.isArray(obj);
};
/**
* 指定の値がBoolean型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} Boolean型ならtrue
*/
Lang.isBoolean = function(obj) {
return obj === true || obj === false
|| toString.call(obj) === "[object Boolean]";
};
/**
* 指定の値がDate型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} Date型ならtrue
*/
Lang.isDate = function(obj) {
return toString.call(obj) === "[object Date]";
};
/**
* 指定の値がRegExp型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} RegExp型ならtrue
*/
Lang.isRegExp = function(obj) {
return toString.call(obj) === "[object RegExp]";
};
/**
* 指定の値がArguments型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} Arguments型ならtrue
*/
Lang.isArguments = function(obj) {
return toString.call(obj) === "[object Arguments]";
};
/**
* 指定の値がError型であるかを返します。
*
* @param {Object}
* obj 値
* @return {Boolean} Error型ならtrue
*/
Lang.isError = function(obj) {
return toString.call(obj) === "[object Error]";
};
/**
* getterとsetterを持つプロパティを定義します。
* <p>
* getter及びsetterの省略が可能です。省略した場合は単純に値の読み書きを行う処理に置き換えられます。
* 内部で自動的に前後にアンダースコアを2つ付けた内部プロパティが定義され、 自動生成されたgetter及びsetterはそのプロパティを参照します。
* プロパティ名がnameの場合は__name__が自動的に定義されるプロパティです。
* </p>
*
* @param {Object}
* 対象のオブジェクト
* @param {String}
* プロパティ名
* @param {Function}
* getter関数
* @param {Function}
* setter関数
* @param {Object}
* デフォルトの値
*/
Lang.defineProperty = function(target, name, getter, setter, defaultValue) {
var property = "__" + name + "__";
target[property] = defaultValue;
if (getter) {
target.__defineGetter__(name, getter);
} else {
target.__defineGetter__(name, function() {
return this[property];
});
}
if (setter) {
target.__defineSetter__(name, setter);
} else {
target.__defineSetter__(name, function(value) {
this[property] = value;
});
}
};
//
// expose
//
module.exports = Lang;