js对象,原型,call,apply浅析
//对象直接量,创建对象最简单的方式是在js里使用对象直接量 var book = { "main title": "js", //属性里有空格,要用引号 "s-t": "the microsoft", //有连字符也要用引号 "for": "all start", //keyword也要用引号 x: 2, author: { fistname: "jiangfan" } }; alert(book.x); //new运算符创建并初始化一个新对象,关键字new后跟随一个函数调用。这里的函数成为构造函数(constructor), //构造函数用以初始化一个新创建的对象。 var o = new Object(); //创建一个空对象,和{}一样 var a = new Array(); //创建一个空数组,和[]一样 var d = new Date(); //创建一个表示当前时间的Date对象 var r = new RegExp("js"); //创建一个可以进行模式匹配的EegExp对象 //原型介绍:每一个js对象(null除外)都和另一个对象关联。“另一个”对象就是原型,每一个对象都从原型继承属性 //所以通过对象直接量创建的对象都具有同一个原型对象,可以通过Object.prototype获得对原型对象的引用。 //通过new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。所以,同使用{}创建对象一样,通过new Object() //创建的对象也继承Object.prototype。new Array()创建的对象的原型是Array.prototype,new Date()创建的对象原型是Date.prototype. //本例完成:通过原型继承创建一个新对象 function inherit(p) { if (p == null) throw TypeError(); if (Object.create) return Object.create(p); var t = typeof p; if (t !== "object" && t !== "function") throw TypeError(); function f() { }; f.prototype = p; return new f(); } var obj = { fa: "jf", ofun: function (a1, a2) { alert(a1 + a2); }, applys: function (arg) { alert(arg[0] + arg[1]); } }, tempobj; tempobj = {}; obj.ofun.call(tempobj, "hello", "world"); obj.applys.call(tempobj, ["hello", "world"]); //call()和apply()例子如下: //想通过o的方法来调用函数f(),可以选择call(),apply() f.call(o); //f.apply(o); //以上两个代码解释如下: //假设对象o中预先不存在名为m的属性 o.m = f; //将f存储为o的临时方法 o.m(); delete o.m //将临时方法删除
js对象有三个属性,1:原型属性(prototype),2,类属性(调用toString()返回如下格式字符串:[object,class].
//对象的类属性(class attribute)是一个字符串,用以表示对象的类型信息。 //classof可以传递任意类型的参数 function classof(o) { if(o===null) return "Null"; if(o===undefined) return "Undefined"; return Object.prototype.toString.call(o).slice(8,-1) }
分享技术的奥秘,共同平等的提高。