JavaScript知识点总结(十一)之js中的Object类详解


Posted in Javascript onMay 31, 2016

JavaScript中的Object对象,是JS中所有对象的基类,也就是说JS中的所有对象都是由Object对象衍生的。Object对象主要用于将任意数据封装成对象形式。

一、Object类介绍

Object类是所有JavaScript类的基类(父类),提供了一种创建自定义对象的简单方式,不再需要程序员定义构造函数。

二、Object类主要属性

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

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

三、Object类主要方法

1.hasOwnProperty(propertyName)

判断对象是否有某个特定的属性。必须用字符串指定该属性,例如,obj.hasOwnProperty("name"),返回布尔值。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

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

运行结果:

JavaScript知识点总结(十一)之js中的Object类详解

hasOwnProperty的用法不仅仅在此,在Jquery中在编写插件中,少不了的一步,就是初始化参数,其中一个很重要的方法就是$.extend();他的原理就是应用了hasOwnProperty()方法;利用for in 循环遍历对象成员中,有没有相同名称的对象成员,有的话就用这个新的对象成员替换掉旧的,通过这种方式,我们就可以通过修改方法中的参数变化,从而控制程序的流程,而对于那些没有改变的部分,仍使用默认值进行控制,我们自己也可以简单的模拟一下这个extend函数,如下

function extend(target,source){//target 旧的 source新的
for (var i in source){
if(target.hasOwnProperty(i)){
target[i]=source[i];
}
}
return target;
}
var a={"first":,"second":"lyl","third":"bob"};
var b={"third":"leo"};
extend(a,b);
for(var i in a){
alert(a[i]);//原本是bob,现在变成leo了
}

  2.isPrototypeOf(object)

判断该对象是否为另一个对象的原型。

obj1.isPrototypeOf(obj2);

obj1是 一个对象的实例;obj2是另一个将要检查其原型链的对象。原型链可以用来在同一个对象类型的不同实例之间共享功能。如果obj2的原型链中包含 obj1,那么isPrototypeOf 方法返回 true。如果obj2不是一个对象或者obj1没有出现在obj2中的原型链中,isPrototypeOf 方法将返回 false。

<script type="text/javascript">
function foo(){
this.name = 'foo';
}
function bar(){
}
bar.prototype = new foo();
var goo = new bar();
alert(goo.name); //foo
alert(bar.prototype.isPrototypeOf(goo));//true,在bar的原型链中有当前对象goo,则isPrototypeOf方法返回true
</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:

var p = new Object(); //通过Object直接创建对象
//为p对象动态添加属性
p.Age=;
p.Name="孤傲苍狼";
//扩展Object类,为Object类添加一个Show方法
Object.prototype.Show=function(){
alert(this.Age+"\t"+this.Name);
}
alert(p.Age);
p.Show();
document.write("<pre>");
document.writeln("p.constructor:"+p.constructor);//得到对象的构造函数
document.writeln("Object.prototype:"+Object.prototype);//得到prototype对象,prototype是静态属性,只能通过"类名.prototype"去访问
document.writeln("p.isPrototypeOf(p):"+p.isPrototypeOf(p));
document.writeln("p.hasOwnProperty(\"Age\"):"+p.hasOwnProperty("Age"));
document.writeln("p.propertyIsEnumerable(\"Age\"):"+p.propertyIsEnumerable("Age"));
document.writeln("p.toString():"+p.toString());
document.writeln("p.valueOf():"+p.valueOf());
document.write("</pre>");

运行结果:

JavaScript知识点总结(十一)之js中的Object类详解

测试代码2:

var Car = function(){};
Car.prototype.hello = function(){
alert("hello car");
};
var car = new Car();
car.f = function() {
alert("自定义方法");
}
document.write("<pre>");
document.writeln("car.hasOwnProperty(\"f\")的结果是:"+car.hasOwnProperty("f"));//ture,car对象有f方法
document.writeln("car.propertyIsEnumerable(\"f\")的结果是:"+car.propertyIsEnumerable("f"));//ture,car对象有f方法,f方法是可以被枚举的
document.writeln("car.hasOwnProperty(\"hello\")"+car.hasOwnProperty("hello")); // false,因为car本身没有hello方法
document.writeln("car.propertyIsEnumerable(\"hello\")的结果是:"+car.propertyIsEnumerable("hello")); // false,没有这个方法当然不能枚举
document.writeln("car.constructor.prototype.hasOwnProperty(\"hello\")的结果是:"+car.constructor.prototype.hasOwnProperty("hello"));// true,car的类Car的原型有hello方法
document.writeln("car.constructor.prototype.propertyIsEnumerable(\"hello\")的结果是:"+car.constructor.prototype.propertyIsEnumerable("hello"));// true, car的类的Car的原型hello方法是可以被枚举的
document.writeln("Car.prototype.hasOwnProperty(\"hello\")的结果是:"+Car.prototype.hasOwnProperty("hello"));// true,car的类Car的原型有hello方法
document.writeln("Car.prototype.propertyIsEnumerable(\"hello\")的结果是:"+Car.prototype.propertyIsEnumerable("hello"));
document.write("</pre>");

运行结果:

JavaScript知识点总结(十一)之js中的Object类详解

以上所述是小编给大家介绍的JavaScript知识点总结(十一)之js中的Object类详解,希望对大家有所帮助

Javascript 相关文章推荐
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
Jquery easyui 下loaing效果示例代码
Aug 12 Javascript
浅析JavaScript中的隐式类型转换
Dec 05 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
Feb 01 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
Dec 07 Javascript
Angular2学习笔记之数据绑定的示例代码
Jan 03 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
Jul 21 Javascript
小程序中canvas的drawImage方法参数使用详解
Jul 04 Javascript
vue下canvas裁剪图片实例讲解
Apr 16 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
Aug 25 Javascript
JavaScript代码实现简单计算器
Dec 27 Javascript
基于jQuery实现点击列表加载更多效果
May 31 #Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
May 31 #Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
May 31 #Javascript
Bootstrap表单布局样式代码
May 31 #Javascript
jQuery使用经验小技巧(推荐)
May 31 #Javascript
JavaScript知识点总结(十)之this关键字
May 31 #Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
May 31 #Javascript
You might like
php disk_free_space 返回目录可用空间
2010/05/10 PHP
PHP mail()函数使用及配置方法
2014/01/14 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
跟老齐学Python之正规地说一句话
2014/09/28 Python
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
感恩节活动方案
2014/01/27 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
致运动员加油稿
2015/07/21 职场文书
运动会广播稿200字
2015/08/19 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android