ECMAScriptJavaScript学习总结(十一)——Object类详解

一、Object类介绍

  Object类是富有JavaScript类的基类(父类),提供了相同种植创建于定义对象的简约方法,不再要程序员定义构造函数。

仲、Object类主要性能

  1.constructor:对象的构造函数。

  2.prototype:获得接近的prototype对象,static性质。

老三、Object类主要措施

  1.hasOwnProperty(propertyName)

  判断目标是否出某个特定的性能。必须用字符串指定该属性,例如,obj.hasOwnProperty(“name”),返回布尔值。此办法无法检查该目标的原型链中是否具有该属性;该属性必须是目标自我的一个成员。

1 var str ="";
2 alert("str.hasOwnProperty(\"split\")的结果是:"+str.hasOwnProperty("split")); //return false
3 alert("String.prototype.hasOwnProperty(\"split\")的结果是:"+String.prototype.hasOwnProperty("split"));//return true

运作结果:

  ECMAScript 1ECMAScript 2

  hasOwnProperty的用法不仅仅以斯,在Jquery中在编辑插件中,少不了的同一步,就是初始化参数,其中一个万分要紧之章程就是$.extend();他的法则就是是使用了hasOwnProperty()方法;利用for
in
循环遍历对象成员被,有没有发出同名称的目标成员,有的话虽因此是新的对象成员替换掉旧的,通过这种艺术,我们虽可由此改章程吃的参数变化,从而决定次的流程,而对那些无改动的一对,仍采用默认值进行控制,我们好也堪略的效仿一下此extend函数,如下

 1 function extend(target,source){//target 旧的 source新的
 2   for (var i in source){
 3         if(target.hasOwnProperty(i)){
 4         target[i]=source[i];
 5         }
 6     }
 7     return target;
 8 }
 9 var a1={"first":1,"second":"lyl","third":"bob"};
10 var b1={"third":"leo"};
11 extend(a1,b1);
12 for(var i in a1){
13     alert(a1[i]);//原本是bob,现在变成leo了
14 }

  2.isPrototypeOf(object)

  判断该对象是不是为另外一个目标的原型。

  obj1.isPrototypeOf(obj2);

  obj1是
一个对象的实例;obj2凡是另外一个快要检查该原型链的目标。原型链可以为此来以与一个对象类型的两样实例之间共享功能。如果obj2的原型链中包含
obj1,那么isPrototypeOf 方法返回
true。如果obj2无是一个对象要obj1没有起于obj2遭到的原型链中,isPrototypeOf
方法以返回 false。

 1  <script type="text/javascript">
 2     function foo(){
 3         this.name = 'foo';
 4     }
 5     function bar(){
 6 
 7     }
 8     bar.prototype = new foo();
 9     var goo = new bar();
10     alert(goo.name); //foo
11     alert(bar.prototype.isPrototypeOf(goo));//true,在bar的原型链中有当前对象goo,则isPrototypeOf方法返回true
12   </script>

  3.propertyIsEnumerable(propertyName)

  通过者办法我们好检测出之目标成员是否是不过遍历的,如果是不过遍历出来的,证明是目标就是得采用for
in 循环进行遍历的,

  格式如下:obj.propertyIsEnumerable(propertyName)

  如果 propertyName在叫 obj中还可以以一个 For…In
循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object
不具有所指定的性能或者所指定的性不是可列举的,那么
propertyIsEnumerable 属性返回
false。典型地,预定义的习性不是不过列举的,而用户定义的属性总是可列举的。

  4.toString():返回对象对应之字符串

  5.valueOf():返回对象对应的原始类型

  以上5只章程都是Object.prototype上定义的,ECMAScript
中的具有目标都是因为Object继承而来,所以在ECMAScript上的富有目标都存有为几只方法

测试代码1:

 1 var p1 = new Object(); //通过Object直接创建对象
 2     //为p1对象动态添加属性
 3     p1.Age=20;
 4     p1.Name="孤傲苍狼";
 5     //扩展Object类,为Object类添加一个Show方法
 6     Object.prototype.Show=function(){
 7         alert(this.Age+"\t"+this.Name);
 8     }
 9     alert(p1.Age);
10     p1.Show();
11     document.write("<pre>");
12     document.writeln("p1.constructor:"+p1.constructor);//得到对象的构造函数
13     document.writeln("Object.prototype:"+Object.prototype);//得到prototype对象,prototype是静态属性,只能通过"类名.prototype"去访问
14     document.writeln("p1.isPrototypeOf(p1):"+p1.isPrototypeOf(p1));
15     document.writeln("p1.hasOwnProperty(\"Age\"):"+p1.hasOwnProperty("Age"));
16     document.writeln("p1.propertyIsEnumerable(\"Age\"):"+p1.propertyIsEnumerable("Age"));
17     document.writeln("p1.toString():"+p1.toString());
18     document.writeln("p1.valueOf():"+p1.valueOf());
19     document.write("</pre>");

运作结果:

  ECMAScript 3

测试代码2:

 1 var Car = function(){};
 2     Car.prototype.hello = function(){
 3         alert("hello car");
 4     };
 5     var car = new Car();
 6     car.f = function() {
 7         alert("自定义方法");
 8     }
 9     document.write("<pre>");
10     document.writeln("car.hasOwnProperty(\"f\")的结果是:"+car.hasOwnProperty("f"));//ture,car对象有f方法
11     document.writeln("car.propertyIsEnumerable(\"f\")的结果是:"+car.propertyIsEnumerable("f"));//ture,car对象有f方法,f方法是可以被枚举的
12     document.writeln("car.hasOwnProperty(\"hello\")"+car.hasOwnProperty("hello")); // false,因为car本身没有hello方法
13     document.writeln("car.propertyIsEnumerable(\"hello\")的结果是:"+car.propertyIsEnumerable("hello"));   // false,没有这个方法当然不能枚举
14     document.writeln("car.constructor.prototype.hasOwnProperty(\"hello\")的结果是:"+car.constructor.prototype.hasOwnProperty("hello"));// true,car的类Car的原型有hello方法
15     document.writeln("car.constructor.prototype.propertyIsEnumerable(\"hello\")的结果是:"+car.constructor.prototype.propertyIsEnumerable("hello"));// true, car的类的Car的原型hello方法是可以被枚举的
16     document.writeln("Car.prototype.hasOwnProperty(\"hello\")的结果是:"+Car.prototype.hasOwnProperty("hello"));// true,car的类Car的原型有hello方法
17     document.writeln("Car.prototype.propertyIsEnumerable(\"hello\")的结果是:"+Car.prototype.propertyIsEnumerable("hello"));
18     document.write("</pre>");

运转结果:

  ECMAScript 4