@blog.justoneplanet.info

日々勉強

JavaScript Object

■オブジェクトを生成

オブジェクトリテラルを使った生成

世間的には一般的である。

var obj = {};
var john = {
    "name" : "John Norton",
    "age" : 28,
    "married" : true
};

new演算子を使った生成

個人的には以下のようにnew演算子とコンストラクタ関数を定義する方法が好きだ。

function Person(name, age, married){
    this.name = name;
    this.age = age;
    this.married = married;
}
var john = new Person('John Norton', 28, true);

引数の順番が固定なのが嫌なので、以下の様な方法も個人的には使ったりする。

function Person(arg){
    this.name = arg.name;
    this.age = arg.age;
    this.married = arg.married;
}
var john = new Person({
    "name" : "John Norton",
    "age" : 28,
    "married" : true
});

■オブジェクトのプロパティ

var book = {};
book.title= "桃太郎";
book.chapter1 = new Object();
book.chapter1.title = "おじいさん芝刈り";
book.chapter2 = {
    "title" : "おばあさん川へ洗濯"
}

プロパティの調査

以下のようにするとユーザ定義のプロパティが調べられる。

function surveyProperties(obj){
    var txt = '';
    for(var p in obj){
        txt .= p + "\n";
    }
    alert(txt);
}

但し、継承されたプロパティは返されない。

プロパティの存在確認

存在しないプロパティを参照するとundefinedが返る。

if(john.name !== undefined){
    //code
}

以下のようにin演算子を使用しても確認できる。

if("name" in john){
    //code
}

プロパティが存在し、undefined(未定義値)が代入されていた場合、上述のコードは異なった結果をもたらす。

プロパティの削除

以下のようにdelete演算子を使用して、プロパティを削除する。

delete john.name;

■連想配列とオブジェクト

JavaScriptにおける連想配列はオブジェクトのプロパティである。

alert(john.name);//John Norton
alert(john['name']);//John Norton

つまりJavaScriptではプロパティの名前を文字列として与えられるので、プログラム中で生成する事が出来る。

■プロパティ

コンストラクタプロパティ

constructorプロパティにはコンストラクタ関数が格納されている。但し、alertした場合は関数名だけでなく内部のコードも表示される。

var date = new Date();
alert(date.constructor === Date);// true
function Person(arg){
    this.name = arg.name;
    this.age = arg.age;
    this.married = arg.married;
}
var john = new Person({
    "name" : "John Norton",
    "age" : 28,
    "married" : true
});
alert(john.constructor);
/*
function Person(arg) {
    this.name = arg.name;
    this.age = arg.age;
    this.married = arg.married;
}
*/
alert(john.constructor === Person);//true

以下のようにtypeof演算子を使用して、変数の型を調べられる。

function Person(arg){
    this.name = arg.name;
    this.age = arg.age;
    this.married = arg.married;
}
var john = new Person({
    "name" : "John Norton",
    "age" : 28,
    "married" : true
});
if(typeof john ==="object"){
    alert('"john" is a Object');
}

以下のようにinstanceof演算子を使用して、任意のクラスのインスタンスかどうかテストできる。

function Person(arg){
    this.name = arg.name;
    this.age = arg.age;
    this.married = arg.married;
}
var john = new Person({
    "name" : "John Norton",
    "age" : 28,
    "married" : true
});
if(john instanceof Person){
    alert('"john" is instance of Person');
}

■メソッド

hasOwnProperty()メソッド

引数で指定した名前のプロパティを持つかどうかを返す。但し、継承したものはfalseとなる。

function Person(arg){
    this.name = arg.name;
    this.age = arg.age;
    this.married = arg.married;
}
var john = new Person({
    "name" : "John Norton",
    "age" : 28,
    "married" : true
});
john.hasOwnProperty('toString');//false
john.hasOwnProperty('name');//true

propertyIsEnumerable()メソッド

hasOwnProperty()メソッドでtrueを返し、さらにfor/inループで列挙が可能なものかどうかを返す。

function Person(arg){
    this.name = arg.name;
    this.age = arg.age;
    this.married = arg.married;
}
var john = new Person({
    "name" : "John Norton",
    "age" : 28,
    "married" : true
});
john.hasOwnProperty('toString');//false
john.hasOwnProperty('name');//true

isPrototypeOf()メソッド

引数で指定したオブジェクトのprototypeオブジェクトであるかどうかを返す。

var john = {};
alert(Object.prototype.isPrototypeOf(john));//true
alert(Object.isPrototypeOf(john));//false
alert(john.isPrototypeOf(Object.prototype));//false
alert(Function.prototype.isPrototypeOf(Object));//true

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment