ホームページ >ウェブフロントエンド >jsチュートリアル >独自の JS クラスを作成するために必要なコア コード library_js オブジェクト指向

独自の JS クラスを作成するために必要なコア コード library_js オブジェクト指向

WBOY
WBOYオリジナル
2016-05-16 17:51:46976ブラウズ
コードをコピー コードは次のとおりです:

(function(win) {
var toString = Object.prototype.toString;
var hasOwn = Object.prototype.hasOwnProperty;
var class2type = {};
class2type[ "[オブジェクトブール値]"] = "ブール値";
クラス2タイプ["[オブジェクト番号]"] = "数値";
クラス2タイプ["[オブジェクト文字列]"] = "文字列"; ["[オブジェクト関数]"] = "関数";
クラス2タイプ["[オブジェクト配列]"] = "配列";
クラス2タイプ["[オブジェクト日付]"] = "日付"; class2type["[object RegExp]"] = "regexp";
class2type["[object Object]"] = "object";
win.type = function(obj) {
return obj == null ? String(obj) : class2type[toString.call(obj)] || "オブジェクト";
win.isBoolean = function(obj) {
return type(obj) "ブール値";
};
win.isNumber = function(obj) {
戻り値の型(obj) === "数値";
win.isString = function( obj) {
戻り値の型(obj) === "文字列";
win.isDate = function(obj) {
戻り値の型(obj) === "日付";
};
win.isRegExp = function(obj) {
return type(obj) === "regexp";
win.isObject = function(obj); 🎜>戻り値の型(obj) === 'オブジェクト';
};
win.isFunction = function(obj) {
return type(obj) === "関数";
};
win.isArray = function(obj) {
return type(obj) === "配列";
};
win.isWindow = function(obj) {
return obj
&& typeof obj === "object"
&& "setInterval" in obj;
};
win.isNumeric = function(obj) {
return !isNaN(parseFloat(obj)) && isFinite(obj);
};
win.isPlainObject = function(obj) {
if (!obj
|| type(obj) !== "オブジェクト"
|| obj.nodeType
|| isWindow(obj) )) {
false を返します;
}
try {
if (obj.constructor
&& !hasOwn.call(obj, "constructor")
&& !hasOwn.call(obj.constructor.prototype, "isPrototypeOf" )) {
false を返します;
}
} catch (e) {
return false;
}
var キー;
for (obj のキー) {
}
リターンキー === 未定義 || hasOwn.call(obj, key);
};
win.isEmptyObject = function(obj) {
for ( obj の変数名) {
return false;
}
true を返します。
};
win.isPrimitive = function(obj){
var type = typeof obj;
戻り値の型 === '文字列' ||タイプ === '数値' ||タイプ === 'ブール値';
};
//HTMLElement
win.isElement = function(obj){
return obj ? obj.nodeType === 1 : false;
};
//TextNode
win.isTextNode = function(obj){
return obj ? obj.nodeName === "#text" : false;
};
win.isIterable = function(obj){
return (obj && typeof obj !== 'string') ? obj.length !== 未定義 : false;
};
win.isDefined = function(obj){
obj の型を返します !== '未定義';
};
win.error = function(msg) {
throw new Error(msg);
};
win.now = function() {
return (new Date()).getTime();
};
win.print = function(value) {
document.write(value);
};
win.println = function(value) {
print(value);
document.write("
");
};
win.each = function(object, callback, args) {
var name, i = 0,
length = object.length,
isObj = (length === 未定義 || isFunction(物体));
if (args) {
if (isObj) {
for (オブジェクト内の名前) {
if (callback.apply(object[name], args) === false) {
休憩。
}
}
} else {
for (; i < length;) {
if (callback.apply(object[i ], args) === false) {
休憩;
}
}
}
} else {
if (isObj) {
for (オブジェクト内の名前) {
if (callback.call(object[name],名前, オブジェクト[名前]) === false) {
break;
}
}
} else {
for (; i < length;) {
if (callback.call(object[i], i, object[i ]) == = false) {
ブレイク;
}
}
}
}
オブジェクトを返します。
};
win.Array.prototype.toString = function(){
return "[" this.join() "]"
}
win.extend = function() {
var オプション、
名前、
src、
コピー、
copyIsArray、
クローン、
ターゲット = 引数[0] || {}、
i = 1、
length = argument.length、
deep = false;
// ディープコピー状況を処理します
if ( typeof target === "boolean" ) {
deep = target;
ターゲット = 引数[1] || {};
// ブール値とターゲットをスキップします
i = 2;
}
// ターゲットが文字列または何かである場合の処理​​ (ディープコピーで可能)
if ( typeof target !== "object" && !isFunction(target) ) {
target = {};
}
// 引数が 1 つだけ渡された場合、jQuery 自体を拡張します
if ( length === i ) {
target = this;
--私;
}
for ( ; i < length; i ) {
// null 以外/未定義の値のみを処理します
if ( (options = argument[ i ]) != null ) {
// 基本オブジェクト
for ( name in options ) {
src = target[ name ]; を拡張します。
copy = オプション[名前];
// 終わりのないループを防止
if ( target === copy ) {
continue;
}
// プレーンオブジェクトまたは配列をマージする場合は再帰
if ( deep && copy && ( isPlainObject(copy) || (copyIsArray = isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && isArray(src) : [];
} else {
clone = src && isPlainObject(src) : {}; }
// 元のオブジェクトは移動せず、クローンを作成します。
target[ name ] = extend( deep, clone, copy )
// 未定義の値を取り込まない
} else if ( copy !== unknown ) {
target[ name ] = copy;
}
}
}
}
// 変更されたオブジェクトを返します
return target; 🎜> };
})(window);


extend メソッドを使用しない場合は、次のように独自のコンポーネントを作成できます。

コードをコピー
コードは次のとおりです。 (function(win){ win.StringBuffer = function(){ this.datas = [] ;
}
var proto = StringBuffer.prototype;
proto.append = function(value){
this.datas.push(value); },
proto.toString = function(){
return this.datas.join("")
}
})(window); extend メソッドを使用する場合は、次のように実行できます。 コンポーネントを記述します:




コードをコピー

コードは次のとおりです:

(function(win){ win.extend(win,{ StringBuilder : function(){ this.datas = []; } }) ; win.extend(StringBuilder.prototype, {
append : function(value){
this.datas.push(value);
},
toString : function(){
return this.datas.join("");
}
});
})(window);


これら 2 つのメソッドは同じ効果があります。 extend メソッドは、第 1 章で説明したように、プラグイン開発などのさらに多くのイベントを実行することもできます。2 つのメソッドは非常に似ています。
もちろん、もともと jQuery プラグインを作成したかった場合は、jQuery の extend を使用するだけです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。