21000+行原生J S的学习之路(第二篇)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了21000+行原生J S的学习之路(第二篇)相关的知识,希望对你有一定的参考价值。

10.  object

interface Object {
    /** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */
    constructor: Function;

    /** Returns a string representation of an object. */
    toString(): string;

    /** Returns a date converted to a string using the current locale. */
    toLocaleString(): string;

    /** Returns the primitive value of the specified object. */
    valueOf(): Object;

    /**
      * Determines whether an object has a property with the specified name.
      * @param v A property name.
      */
    hasOwnProperty(v: string): boolean;

    /**
      * Determines whether an object exists in another object‘s prototype chain.
      * @param v Another object whose prototype chain is to be checked.
      */
    isPrototypeOf(v: Object): boolean;

    /**
      * Determines whether a specified property is enumerable.
      * @param v A property name.
      */
    propertyIsEnumerable(v: string): boolean;
}

 object它包含有很多内置方法以及属性,让我们从第一个开始看。

   10.1 constructor:它就是我们常说的构造器函数,它通常在对象创建或者实例化时候被调用,返回对创建此对象的函数的引用。如:

               var text = new Array (); 

               console.log(text.constructor );  //      function Array() { [native code] } 


   10.2 toString() 方法可把一个逻辑值转换为字符串,并返回结果.它会根据原始布尔值或者 booleanObject 对象的值返回字符串 "true" 或 "false",当调用此方法的对象不是一个不是 Boolean对象时,则抛出异常 TypeError.

                var boo = new Boolean(true);

                console.log(boo.toString();     //true

                var Boo = new Boolean(false);

                console.log(boo.toString();     //false


    10.3 toLocalString():调用此方法可以将arrayObject 以本地字符串表示.把数组转换为本地字符串,首先调用每个数组元素的 toLocaleString() 方法,然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。

                 var  name = new Array();

                 name[0] = "yasuo";

                 name[1] = "dema";

                 name[2] = "jianji";

                 console.log(name.toLocaleString());      //yasuo,dema,jianji


    10.4 hasOwnProperty():hasOwnProperty() 方法会返回一个布尔值,指示对象是否具有指定的属性作为自身(不继承)属性,语法:

        obj.hasOwnProperty(prop)

所有继承了Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

                

                     var  obj ={ name:"haha"};

                     Object.prototype.fistName = 1;

                     //Object.prototype.fistName = 1;

                     console.log(obj.fistName);                                     //1

                     console.log(‘fistName‘ in obj);                                //true

                     console.log(obj.hasOwnProperty(‘name‘));             //true

                     console.log(obj.hasOwnProperty(‘fistName‘));       //false

从以上测试中可以看出hasOwnProperty()在测试自己的属性时当然返回的时true而继承来的属性则为fasle.下面看下继承的过过程总对象的方法及属性有什么变化。


function newobj(){

this.blog = "我的博客";

this.url = "http://home.51cto.com/space?uid=12743560";


this.sayHello = function(){

alert("欢迎来到" + this.blog);

};

  }


var obj = {

name: "JS"

,sayHi: function(){

alert("欢迎访问" + this.url);

}

};

// 使用对象obj覆盖Site本身的prototype属性

newobj.prototype = obj;//此时newobj会继承obj的方法sayHi以及属性name


var  HH =  new newobj();

//以下为自有属性和方法,均为true

console.log( HH.hasOwnProperty("blog") ); // true

console.log( HH.hasOwnProperty("url") ); // true

console.log( HH.hasOwnProperty("sayHello") ); // true

// 以下属性继承自原型链,因此为false

console.log( HH.hasOwnProperty("name") ); // false

console.log( HH.hasOwnProperty("sayHi") ); // false


// 想要查看对象(包括原型链)是否具备指定的属性,可以使用in操作符

console.log( "name" in HH ); // true

console.log( "sayHi" in HH ); // true

console.log( "toString" in HH ); // true


    10.5 valueOf() 方法可返回 Boolean 对象的原始值,用法如下:

//booleanObject.valueOf()


var boo = new Boolean(false);
document.write(boo.valueOf());
var boo = new Boolean(true);
document.write(boo.valueOf());

  同样如果调用该方法的对象不是 Boolean,则抛出异常 TypeError。


    10.6 isPrototypeOf()函数用于指示对象是否存在于另一个对象的原型链中。如果存在,返回true,否则返回false。用法如下:

prototypeObject.isPrototypeOf( object )

 

function newobj(){

this.blog = "我的博客";

this.url = "http://home.51cto.com/space?uid=12743560";


this.sayHello = function(){

alert("欢迎来到" + this.blog);

};

}


var  HH =  new newobj();

console.log( newobj.prototype.isPrototypeOf(HH) ); // true


var obj = {

name: "JS"

,sayHi: function(){

alert("欢迎访问" + this.url);

}

};

// 使用对象obj覆盖Site本身的prototype属性

newobj.prototype = obj;//此时newobj会继承obj的方法sayHi以及属性name


var s2 =  new newobj();


console.log( obj.isPrototypeOf(s2) ); // true

console.log( newobj.isPrototypeOf(s2) ); // false

    10.7 propertyIsEnumerable()是用来检测属性是否属于某个对象的,如果检测到了,返回true,否则返回false. 

1.这个属性必须属于实例的,并且不属于原型. 

2.这个属性必须是可枚举的,也就是自定义的属性,可以通过for..in循环出来的

只要符合上面两个要求,就会返回true;

        function MyObject() { 

this.name = "我是实例的属性"; 

var obj = new MyObject(); 

        console.log(obj.propertyIsEnumerable("name"));//true 

console.log(MyObject.propertyIsEnumerable("name"));//false

MyObject.prototype.say = "我是原型的属性"; 

console.log(obj.propertyIsEnumerable("say"));//false 

console.log(MyObject.propertyIsEnumerable("say")); //flase  不属于实例


for (var i in obj) { 

console.log(i);//name,age ;

我嘞个去,一个Object写了这么多。歇会歇会。。。
















本文出自 “你是我今生倾心驻足的风景” 博客,谢绝转载!

以上是关于21000+行原生J S的学习之路(第二篇)的主要内容,如果未能解决你的问题,请参考以下文章

21000+行原生J S的学习之路(第一篇)

21000+行原生J S的学习之路(第三篇)

#Java学习之路——基础阶段二(第二篇)

Python学习之路 第二篇 二进制及其相关转化

Python成长之路第二篇_字典的置函数用法

Python成长之路第二篇_字典的置函数用法