var obj = { name : "trigkit4", age : 21};//分号最好加上在使用字面量声明Object对象时,不会调用Object()构造函数(FF除外)
Object.prototype.print = function(){ console.log(this)};var obj = new Object();obj.print() // Object实例obj直接继承了Object.prototype的属性和方法
<script type="text/javascript"> //对象是名/值对的集合var browser = {//对象是由花括号括起来的 name:"Firefox", kernel:"Gecko"};</script> //通过点号(.)或“[]”来访问对象的属性 browser.name //"Firefox" browser["kernel"] //"Gecko"对象(objct)是属性(property)的集合,每个属性都由“名/值对”构成,js同样定义了一个特殊的对象——数组,它是带有编号的值的有序集合。
<script type="text/javascript">var boy = {}; //创建一个空对象 boy.name = "小明";//按照原型对象的属性赋值 boy.age = 12; var girl = {}; girl.name = "小红"; girl.age = 10; </script>这就是最简单的封装了,把两个属性封装在一个对象里面。但是,这样的写法有两个缺点,一是如果多生成几个实例,写起来就非常麻烦;二是实例与原型之间,没有任何办法,可以看出有什么联系。
<script type="text/javascript"> function Person(name,age){this.name = name;this.age = age;}</script>我们现在就可以生成实例对象了。
<script type="text/javascript"> var boy = new Person("小明",12);var girl = new Person("小红",10);alert(boy.name); //小明alert(boy.age); //12</script>这时boy和girl会自动含有一个constructor属性,指向它们的构造函数。
<script type="text/javascript">function Person(name,age){this.name = name;this.age = age;}Person.protype.type = "人类";Person.protype.eat = function(){alert("吃米饭");}</script>然后,生成实例:
<script type="text/javascript">var boy = new Person("小明","12");var girl = new Person("小红","10");alert(boy.type);//人类boy.eat();//吃饭</script>这时所有实例的type属性和eat()方法,其实都是同一个内存地址,指向prototype对象,因此就提高了运行效率。
cat = new Animal("feline","meow", "walk/run");cat.prototype.size = "fat";在这种情况下,所有的Animal对象的size属性都是“fat”。原型默认为Object的新实例, 由于仍是对象, 故可以给该对象添加新的属性。就好像style是javascript的一个对象一样,也可以往style后继续添加属性。
<script type="text/javascript">/*定义一个Person类*/function Person(_name,_age,_salary){ //Person类的公开属性,类的公开属性的定义方式是:”this.属性名“ this.Name=_name; //Person类的私有属性,类的私有属性的定义方式是:”var 属性名“ var Age=_age; var Salary=_salary; //定义Person类的公开方法(特权方法),类的公开方法的定义方式是:”this.functionName=function(){.....}“ this.Show=function(){ alert("Age="+Age+" "+"Salary="+Salary);//在公开方法里面访问类的私有属性是允许的 }</script>对象在查找某个属性的时候,会首先遍历自身的属性,如果没有则会继续查找[[Prototype]]引用的对象,如果再没有则继续查找[[Prototype]].[[Prototype]]引用的对象,依次类推,直到[[Prototype]].….[[Prototype]]为undefined(Object的[[Prototype]]就是undefined)
<script type="text/javascript"> var company = {name : "Microsoft",ages : 39,employees : 99000,CEO : "Nadella" };</script>这里需要注意的是属性和属性值以冒号(:)隔开;多个属性用逗号(,)隔开。对象字面量亦可以定义方法,只需在这个对象的属性上写上function就行,这是一个匿名函数,调用它只需要写上他的方法名()即可。
<script type="text/javascript">var dog = { name:"husky", age:2, run:function(){return "123";}}alert(dog.run());//如果输入dog.run,那么会弹出它后面的function部分的代码</script>基本值类型包装器
var num = new Number(10);console.log(typeof num);//object Object()方法 Object() // 返回一个空对象Object(undefined) // 返回一个空对象Object(null) // 返回一个空对象Object(1) // 等同于 new Number(1)Object("foo") // 等同于 new String("foo")Object(true) // 等同于 new Boolean(true)Object([]) // 返回原数组Object({}) // 返回原对象Object(function(){}) // 返回原函数数组部分
var oTest = new Object; //尽量不用 var oTest = { }; //最好的选择,或者var 0Test = [ ];遍历为了达到遍历数组的最佳性能,推荐使用经典的 for 循环。
var list = [1, 2, 3, 4, 5, ...... 100000000];for(var i = 0, l = list.length; i < l; i++) { console.log(list[i]);}上面代码有一个处理,就是通过 l = list.length 来缓存数组的长度。
function array_max() { var i,max=this[0]; for(i=1;i<this.length;i++) { if(max<this[i]) max=this[i]; } return max; } Array.prototype.max=array_max; var x=new Array(1,2,3,4,5,6); var y=x.max();该代码执行后,y保存数组x中的最大值,或说6。
x = new String("Hi"); if(x.constructor==String) //进行处理(条件为真)。 //或 function MyFunc{ //函数体。 } y=new MyFunc;if(y.constructor==MyFunc)//进行处理(条件为真)。
sort()方法
语法
arrayObject.sort(sortby)
sortby可选。规定排序顺序。必须是函数。
var arr = [11,2,28,4,5,1];
console.log(arr.sort());//return [1, 11, 2, 28, 4, 5]
为毛这里的11、28没有按照顺序来排列呢?这是因为不带参数的sort是按照字符编码的顺序进行排序的。
那么,如果要让数组元素按照从小到大排序呢?看下面代码:
var arr = [11,2,28,4,5,1]; console.log(arr.sort(function(a,b){return a-b;//return [1, 2, 4, 5, 11, 28] }));如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: