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的学习之路(第二篇)的主要内容,如果未能解决你的问题,请参考以下文章