javascriptに深く入り込んで対象に向かって、jsの原型チェーン、継承
8215 ワード
階段は対象に向かう————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
JS , ,
包装の対象————————————————————————————————————————————————————
String Number Boolean
,
,
var str = 'abc';
str.num = 10;
// , num , 。
// String.prototype.num = 10;
alert(str.num);
// , ,
// undefined
プロトタイプチェーン———————————————————————————————————————————————————————————————— ,
ff DOM :__proto__( )
, ,
/ , , __proto__ ,
Object
Object
Object.prototype
対象に向かういくつかの常用属性と方法————————————————————————————————————————————————————————————————————————————————————————————————————————————————————obj.hasOwnProperty('name') : / 。
Object.prototype
constructor :
:
var str = '';
alert(str.constructor===String);//true
, , xxx.prototype.constructor
, :
function Person(){
}
Person.prototype.constructor=Person;
JSON
Person.prototype = {
attr1 : 10,
fn1 : function(){}
}
Person / , 。
, .constructor
( ) Object.constructor,
Object
JSON / , construct
,
For in prototype
( )
construtor
instanceof :
:
person1 instanceof Person true
var arr = [];
arr instanceof Array //true
toString() :
Object
,
Object
Array toString:
Number toString(n): n
toString ( )
var arr=[];
alert( Object.prototype.toString.call(arr) );//[Object Array];
Object.prototype.toString.call(arr)==='[Object Array]';
:
obj.constructor === Array;
obj instanceof Array;
// iframe, window.frames[i].Array;
Object.prototype.toString.call(obj) === '[object Array]';
受け継がれている——————————————————————————————————————————————— : , ,
。
: , ( )
:
: .call():
function Person(name,sex){
this.name = name;
this.sex = sex;
}
function Star(name,sex,job){
Person.call(this,name,sex);
// this ,function Person this window
this.job = job;
}
/ :
【 】
,
JS ,
Star.prototype = deepCopy(Person.prototype);
【 】
JS , java
:
function Father(){
this.name = ' ';
};
Father.prototype.callname = function(){
alert(this.name);
};
function Child(){
};
Child.prototype = new Father();//
var c1 = new Child();
c1.callname();//
:c1 callname , Child callname
Child.prototype callname , new Father()
, ,
Father.prototype callname ,
:
Child.prototype = new Father(); Child prototype
, Child.prototype.constructor ,
c1.constructor , constructor,
c1.constructor Father。
Child.prtotype.constructor=Child;
, this.name [1,2,3];
var c1 = new Child();
c1.name.push(4);
var c2 = new Child();
alert(c2.name);//1,2,3,4
c1 c2, name ,
new Father() 。
。 。
, 。
function F(){};//1
F.prototype = Father.prototype;//2
Child.prototype = new F();//3
Child.prototype.constructor = Child;//4
// 4
1 F 。2 F Father ,
。3 F Child 。
, Child->c1 c1.name, F
name , 2 ,F name
, undefined
c1 callname, Father.prototype
Father.prototype callname 。
。
Child Father.call(this);
【 】
function Father(){
this.name = ' ';
}
var f1 = new Father();
var c1 = cloneObj(f1);
c1.name = ' '
//alert(c1.name)//
//alert(f1.name)//
var a = {
name : 'a'
};
var b = cloneObj(a);
b.name = 'b';
alert(b.name);
alert(a.name);
function cloneObj(obj){
function F(){
};
F.prototype = obj;
return new F();
}
【 】
: new new
: new
: new