JavaScript原生オブジェクト及び拡張
18373 ワード
オブジェクトと元のオブジェクトを内蔵
内蔵(
元のオブジェクト(New以降のオブジェクト)
ソース:http://es5.github.com/#x4.3.6
内蔵オブジェクト(Newは不要)
定義:ECMAScriptによって提供されるオブジェクトは、宿主環境とは独立して、スクリプトプログラムの実行の開始点にあります.
注:各内蔵オブジェクト(
ソース:http://es5.github.io/#x4.3.7
くりを一つあげる:
ECMA-622で定義されている内蔵オブジェクト(built-in)は以下の通りです.
js元のオブジェクトに対する拡張は、
Stringオブジェクトの拡張
オブジェクトの作成
カスタムオブジェクトの構造
上位オブジェクト構造を作成するには、「
デートオブジェクト
getシリーズの方法
属性
これらの方法は配列自体を変えることができます.
これらのプロセスは配列自体を変更しません.
属性
属性
RegExpオブジェクト
属性
非構造関数として呼び出された場合、
属性または方法
属性または方法
説明
トラック
現在のオブジェクトを作成するためのコンストラクターを指します.
hasOwnProperty(name)
与えられた属性nameがインスタンスオブジェクトに存在するかどうかを検出します.nameは文字列で指定します.
isPropertyOf(object)
導入されたオブジェクトを検出します.この方法の使用者の原型オブジェクトですか?一般フォーマット:Class.prototype.isPropertyOf(object)
propertyIs Enumerable(pr)
属性prをfor-innでエニュメレーションできますか?属性proは文字列で指定します.
toLocale String()
オブジェクトの文字列表示を返します.地域や環境に対応しています.
toString()
オブジェクトの文字列表示を返します.
valueOf()
オブジェクトの文字列、数値、またはブール値の表現を返します.
静的方法
全体の方法
グローバル属性
内蔵(
Build-in
)オブジェクトと原生(Naitve
)オブジェクトの違いは、前者は常にエンジン初期化段階で作成されたオブジェクトであり、後者のサブセットである.後者は、実行中に動的に作成されたいくつかのオブジェクトを含む.元のオブジェクト(New以降のオブジェクト)
ECMA-262
は、元のオブジェクト(native object
)を「宿主環境から独立したECMAScript
が提供を実現するオブジェクト」と定義している.以下を含む:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、ActiveXObject( )、Enumerator( )、RegExp( )
これにより、簡単に言えば、元のオブジェクトはECMA-262
によって定義されたクラス(参照の種類)であることがわかる.ソース:http://es5.github.com/#x4.3.6
内蔵オブジェクト(Newは不要)
定義:ECMAScriptによって提供されるオブジェクトは、宿主環境とは独立して、スクリプトプログラムの実行の開始点にあります.
注:各内蔵オブジェクト(
built-in object
)は、元のオブジェクト(Native Object
)であり、内蔵された構造関数は、内蔵されたオブジェクトであり、構造関数でもある.ソース:http://es5.github.io/#x4.3.7
くりを一つあげる:
Native objects: Object (constructor), Date, Math, parseInt, eval。 string indexOf replace, array , ...
Host objects ( ): window, document, location, history, XMLHttpRequest, setTimeout, getElementsByTagName, querySelectorAll, ...
ECMA-622)[2は、新しい2つの内蔵オブジェクト、すなわちGlobal
とMath
を定義しています.それらは元のオブジェクトです.定義により、各内蔵オブジェクトは元のオブジェクトです.]ECMA-622で定義されている内蔵オブジェクト(built-in)は以下の通りです.
global、Object、Function、Array、String、Boolean、Number、Math、Date、RegExp、JSON、Error (Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError URIError)
内蔵オブジェクトの原型も修正できます.if (!Array.prototype.forEach) {
Array.prototype.forEach = function(fn){
for ( var i = 0; i < this.length; i++ ) {
fn( this[i], i, this );
}
};
}
["a", "b", "c"].forEach(function(value, index, array){
assert( value, "Is in position " + index + " out of " + (array.length - 1) );
});
以上のコードは出力されます.PASS Is in position 0 out of 2
PASS Is in position 1 out of 2
PASS Is in position 2 out of 2
注意:原型を広げるのは危険です.Object.prototype.keys = function(){
var keys = [];
for ( var i in this )
keys.push( i );
return keys;
};
var obj = { a: 1, b: 2, c: 3 };
assert( obj.keys().length == 3, "We should only have 3 properties." );
delete Object.prototype.keys;
出力:FAIL We should only have 3 properties.
特別な必要がなければ、原生オブジェクトと原型(prototype
)を拡張するのはよくないです.//
Array.prototype.map = function() {
// code
};
このようにしない限り、例えばいくつかの古いブラウザにECMAScript5
中の方法を追加します.
if (!Array.prototype.map) {
Array.prototype.map = function() {
//code
};
}
原型でオブジェクトを拡張js元のオブジェクトに対する拡張は、
prototype
に登録することにほかならない.例えば、String
オブジェクトにltrim,rtrim
などの方法を拡張することができる.jsの各オブジェクトはObject
から継承され、オブジェクトやその他の属性はprototype
オブジェクトで継承される.prototype
ペアを通じて、内に建てられたオブジェクトを含めて、任意のオブジェクトを拡張することができる.679142:Stringオブジェクトの拡張
if(typeof String.prototype.ltrim=='undefined'){
String.prototype.ltrim = function(){
var s = this;
s = s.replace(/^\s*/g, '');
return s;
}
}
if(typeof String.prototype.rtrim=='undefined'){
String.prototype.rtrim = function(){
var s = this;
s = s.replace(/\s*$/g, '');
return s;
}
}
if(typeof String.prototype.trim=='undefined'){
String.prototype.trim = function(){
return this.ltrim().rtrim();
}
}
if(typeof String.prototype.htmlEncode=='undefined'){
String.prototype.htmlEncode = function(encodeNewLine){//encodeNewLine: encode
var s = this;
s = s.replace(/&/g, '&');
s = s.replace(/</g, '<');
s = s.replace(/>/g, '>');
s = s.replace(/'/g, '"');
if(encodeNewLine){
s = s.replace(/\r
/g, '<br />');
s = s.replace(/\r/g, '<br />');
s = s.replace(/
/g, '<br />');
}
return s;
}
}
Dateオブジェクトの拡張String
:何月何日ありますか?Date.getDaysInMonth = function (year, month) {
var days = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
days = 29;
else
days = 28;
break;
}
return days;
}
if (typeof Date.prototype.format == 'undefined') {
Date.prototype.format = function (mask) {
var d = this;
var zeroize = function (value, length) {
if (!length) length = 2;
value = String(value);
for (var i = 0, zeros = ''; i < (length - value.length); i++) {
zeros += '0';
}
return zeros + value;
};
return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function ($0) {
switch ($0) {
case 'd': return d.getDate();
case 'dd': return zeroize(d.getDate());
case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
case 'M': return d.getMonth() + 1;
case 'MM': return zeroize(d.getMonth() + 1);
case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
case 'yy': return String(d.getFullYear()).substr(2);
case 'yyyy': return d.getFullYear();
case 'h': return d.getHours() % 12 || 12;
case 'hh': return zeroize(d.getHours() % 12 || 12);
case 'H': return d.getHours();
case 'HH': return zeroize(d.getHours());
case 'm': return d.getMinutes();
case 'mm': return zeroize(d.getMinutes());
case 's': return d.getSeconds();
case 'ss': return zeroize(d.getSeconds());
case 'l': return zeroize(d.getMilliseconds(), 3);
case 'L': var m = d.getMilliseconds();
if (m > 99) m = Math.round(m / 10);
return zeroize(m);
case 'tt': return d.getHours() < 12 ? 'am' : 'pm';
case 'TT': return d.getHours() < 12 ? 'AM' : 'PM';
case 'Z': return d.toUTCString().match(/[A-Z]+$/);
// Return quoted strings with the surrounding quotes removed
default: return $0.substr(1, $0.length - 2);
}
});
};
}
オリジナルjsを使ってコピーオブジェクトと拡張を実現します.Date
のgetDaysInMonth
方法は、オリジナルjQuery
を使用して複製オブジェクトを実現し、extend()
のjs
の方法と同様に、拡張オブジェクトを容易に実現することができる.var obj1 = {
name : 'trigkit4',
age : 22
};
var obj2 = {
name : 'frank',
age : 21,
speak : function(){
alert("hi, I'm + name ");
}
};
var obj3 ={
age : 20
};
function cloneObj(oldObj) { //
if (typeof(oldObj) != 'object') return oldObj;
if (oldObj == null) return oldObj;
var newObj = Object();
for (var i in oldObj)
newObj[i] = cloneObj(oldObj[i]);
return newObj;
}
function extendObj() { //
var args = arguments;// args
if (args.length < 2) return;
var temp = cloneObj(args[0]); //
for (var n = 1; n < args.length; n++) {
for (var i in args[n]) {
temp[i] = args[n][i];
}
}
return temp;
}
var obj =extendObj(obj1,obj2,obj3);
console.log(obj);//{ name: 'frank', age: 20, speak: [Function] }
console.log(obj1);//{ name: 'trigkit4', age: 22 }
console.log(obj2);//{ name: 'frank', age: 21, speak: [Function] }
console.log(obj3);//{ age: 20 }
es 5-safeモジュールjQuery
モジュールには、より良い実装が可能な安全に使用できる部分的な方法のみが拡張されている.Function.prototype.bind
Object.create
Object.keys
Array.isArray
Array.prototype.forEach
Array.prototype.map
Array.prototype.filter
Array.prototype.every
Array.prototype.some
Array.prototype.reduce
Array.prototype.reduceRight
Array.prototype.indexOf
Array.prototype.lastIndexOf
String.prototype.trim
Date.now
詳細:http://es5.github.io/オブジェクトの作成
extend()
は、4つのタイプのオブジェクトをサポートする.内部オブジェクト、生成されたオブジェクト、ホストが与えるオブジェクト(例えば、Internetブラウザのes5-safe
およびJavaScript
)、およびwindow
オブジェクト(外部構成要素).document
は11個の内部(または「内蔵」)オブジェクトを提供しています.ActiveX
及びMicrosoft Jscript
オブジェクトです.各オブジェクトは関連する方法と属性があります.Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、Error
におけるオブジェクトの作成には、以下のような方法がある.(1)
(2) JSON
(3)
一、内蔵オブジェクトを使うJavaScript :
1,JavaScript ( ), String、Object、Function ;
2,JavaScript ( ), window、document、body 。
オブジェクトリストを内蔵Array
Boolean
Date
Error
EvalError
Function
Infinity
JSON
Map
Math
NaN
Number
Object
ParallelArray
Promise
Proxy
RegExp
Set
String
Symbol
SyntaxError
Uint32Array
WeakSet
decodeURI
decodeURIComponent()
encodeURI()
encodeURIComponent()
escape()
eval()
isFinite()
isNaN()
null
parseFloat
parseInt
undefined
以上の資料は以下の通りです.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects#.E5.9F.BA.E6.9C.AC.E5.AF.B9.E8.B1.A1 カスタムオブジェクトの構造
上位オブジェクト構造を作成するには、「
String
」というキーワードを使った構造と、原型JavaScript
を用いて構成される2つの方法があります.デートオブジェクト
getシリーズの方法
getDate() Date (1 ~ 31)。
getDay() Date (0 ~ 6)。
getMonth() Date (0 ~ 11)。
getFullYear() Date 。 getYear()。
getHours() Date (0 ~ 23)。
getMinutes() Date (0 ~ 59)。
getSeconds() Date (0 ~ 59)。
getMilliseconds() Date (0 ~ 999)。
getTime() 1970 1 1 。
getTimezoneOffset() (GMT) 。
getUTCDate() Date (1 ~ 31)。
getUTCDay() Date (0 ~ 6)。
getUTCMonth() Date (0 ~ 11)。
getUTCFullYear() Date 。
getUTCHours() Date (0 ~ 23)。
getUTCMinutes() Date (0 ~ 59)。
getUTCSeconds() Date (0 ~ 59)。
getUTCMilliseconds() Date (0 ~ 999)。
セットシリーズの方法setDate() Date (1 ~ 31)。
setMonth() Date (0 ~ 11)。
setFullYear() Date ( )。 setYear() 。
setHours() Date (0 ~ 23)。
setMinutes() Date (0 ~ 59)。
setSeconds() Date (0 ~ 59)。
setMilliseconds() Date (0 ~ 999)。
setTime() Date 。
setUTCDate() Date (1 ~ 31)。
setUTCMonth() Date (0 ~ 11)。
setUTCFullYear() Date ( )。
setUTCHours() Date (0 ~ 23)。
setUTCMinutes() Date (0 ~ 59)。
setUTCSeconds() Date (0 ~ 59)。
setUTCMilliseconds() Date (0 ~ 999)。
toStringシリーズの方法toString() Date ,toString() 。
toTimeString() Date 。
toDateString() Date 。
toUTCString() , Date 。
toLocaleString() , Date 。
toLocaleTimeString() , Date 。
toLocaleDateString() , Date 。
Arayオブジェクト属性
constructor
。
index
, 0.
input
, 。
length
.
prototype
.
方法これらの方法は配列自体を変えることができます.
pop
, 。
push
, 。
reverse
, , , 。
shift
, 。
sort
。
splice
。
unshift
, 。
Access orメソッドこれらのプロセスは配列自体を変更しません.
concat
/
indexOf
, -1。
join
。
lastIndexOf
( ) 。
slice
。
toSource
Returns an array literal representing the specified array; you can use this value to create a new array. Overrides the Object.toSource method.
toString
, Object.toString .
valueOf
Returns the primitive value of the array. Overrides the Object.valueOf method.
ループ(反復)プロセスfilter
, true 。
forEach
。
every
, 。
map
Creates a new array with the results of calling a provided function on every element in this array.
some
, true。
まとめ: :pop()、push()、reverse()、shift()、sort()、splice()、unshift()
:concat()、join()、slice()、toString()
ボロア属性
Boolean.length
, 1.
Boolean.prototype
Boolean .
方法Boolean.prototype.toSource()
Boolean.prototype.toString()
Boolean.prototype.valueOf()
Stringオブジェクト属性
String.length
String.prototype
方法:charAt() 。stringObject.charAt(index)
charCodeAt() Unicode 。 0 – 65535 。 stringObject.charCodeAt(index)
concat() 。
stringObject.concat(stringX, stringX, …, stringX)
indexOf() 。
stringObject.indexOf(searchvalue, fromindex)
lastIndexOf() , 。
localeCompare(): stringObject.localeCompare(target)
match() , 。
indexOf() lastIndexOf(), , 。
stringObject.match(regexp)
replace() , 。stringObject.replace(regexp/substr, replacement)
search() , 。
stringObject.search(regexp)
slice() , 。
stringObject.slice(start, end)
substring() , slice() 。
substr() , slice() 。
toLocaleLowerCase() , , toLowerCase() 。
toLocaleUpperCase() , , toUpperCase() 。
toLowerCase() 。
toUpperCase() 。
this
オブジェクトの方法prototype
およびString
は、文字列の指定された部分を返すことができます.すべての場合にslice()、substring()
方法を使用することを強く推奨します.RegExpオブジェクト
属性
RegExp.prototype.constructor
。
RegExp.prototype.global
, , 。
RegExp.prototype.ignoreCase
。
RegExp.prototype.lastIndex
。
RegExp.prototype.multiline
( ^ $ )
RegExp.prototype.source
。
方法 RegExp.prototype.exec()
。
RegExp.prototype.test()
。
RegExp.prototype.toString()
, 。 Object.prototype.toString() 。
Objectオブジェクト非構造関数として呼び出された場合、
substr()
はslice()
と同等である.属性または方法
Object
の各例は、共通の基本的な属性および方法を有する.属性または方法
説明
トラック
現在のオブジェクトを作成するためのコンストラクターを指します.
hasOwnProperty(name)
与えられた属性nameがインスタンスオブジェクトに存在するかどうかを検出します.nameは文字列で指定します.
isPropertyOf(object)
導入されたオブジェクトを検出します.この方法の使用者の原型オブジェクトですか?一般フォーマット:Class.prototype.isPropertyOf(object)
propertyIs Enumerable(pr)
属性prをfor-innでエニュメレーションできますか?属性proは文字列で指定します.
toLocale String()
オブジェクトの文字列表示を返します.地域や環境に対応しています.
toString()
オブジェクトの文字列表示を返します.
valueOf()
オブジェクトの文字列、数値、またはブール値の表現を返します.
静的方法
Object.create(prototype, descriptors)
, ( )
Object.defineProperty(object, propertyname, descriptor)
Object.defineProperties(object, descriptors)
Object.getOwnPropertyDescriptor(object, propertyname)
Object.getOwnPropertyNames(object)
,
Object.preventExtensions(object)
Object.isExtensible(object)
Object.seal(object)
Object.freeze(object)
, 。
Object.isFrozen(object)
Object.getPrototypeOf(object)
グローバル属性と方法全体の方法
グローバル属性