JS中Object对象的原型的使用方法

这次给大家带来JS中Object对象的原型的使用方法,使用JS中Object对象原型的注意事项有哪些,下面就是实战案例,一起来看一下。

对象概念

javascript 中, 一切引用类型均为对象。 如 function Foo () {} 中,Foo本身就是一个对象的引用。

创建对象方式 字面量方式 new 构造函数函数声明 Object.create

字面量对象

javascript语言级别快速创建对象的实例

var obj = {foo: 'foo', bar: 'bar'}; // Object对象字面量var obj2 = [obj, 'foo', 'bar']; // Array数组字面量var obj3 = /^[a-zA-Z0-9]$/; // RegExp正则字面量var obj4 = function(){}; // Function函数字面量

登录后复制

new 构造函数

通过内置对象的构造函数,或者自定义的函数。 使用 new 操作符,创建一个对象,并且执行构造函数方法。

var obj = new Object();var obj2 = new Array(1000);var obj3 = new RegExp('^[a-zA-Z0-9]$');var obj4 = new Function('a', 'b', 'return a + b;');

登录后复制

函数声明

函数声明创造的对象. 函数属于特殊的对象.

function Foo() {}Foo instanceof Object;Foo instanceof Function;

登录后复制

Object.create

传入一个对象作为返回对象的原型,创建一个新对象, 并将新对象的原型指向传入的对象中。

var foo = { 'foo': 'foo', 'bar': 'bar'};var o = Object.create(foo); // o.proto = fooconsole.log(o.foo); // o.proto.foo

登录后复制

使用Object.create(null) 可以返回一个字典型对象.

var o = Object.create(null);o instanceof Object; // return false;o.toString(); // Uncaught TypeError

登录后复制

对象原型

每一个对象都有一个内置的 proto 属性指向构造它的函数prototype属性. 而构造函数的

prototype.constructor 则指向构造函数本生。一个对象的属性的寻找过程由以下几个部分组成:

寻找对象属性的数据描述符(writable, value)或存取描述符(getter, setter),如果查询到了,则返回 对应的值。如果查询不到,则进入第2步骤。寻找对象属性的值是否有被显示定义 (可以通过 Object.getOwnPropertyNames)检测,如果对象属性定义了,则返回定义的值。 如果没有,则进入第3步骤。寻找对象的隐藏原型proto对象的属性,规则同1,2步骤。如果还未找到,则重复第3步骤, 直到proto 为null 为止。

具体案例如下图所示:

JS中Object对象的原型的使用方法

检测对象原型

测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性

instanceof Object.prototype.isPrototypeOf

instanceof

运算符,语言级别的检测对象的原型链是否包含构造函数的原型

function Foo () {}Foo instanceof Function; // return trueFoo instanceof Object; // return true

登录后复制

模拟instanceof查找对象的原型链的构造函数是否包含传入的构造函数, proto 在一些特定的浏览器有暴露给用户

function Bar () {}function isInstanceof (obj, Constructor) { if (obj === null) { return false; } // 忽略 string, number, boolean, null, undefined 类型干扰 if (!~['object', 'function'].indexOf(typeof obj)) { return false; } var prototype = obj.proto; while(prototype) { if (prototype.constructor === Constructor) {  return true; } prototype = prototype.proto; } return false;}isInstanceof(Bar, Function);isInstanceof(Bar, Object);

登录后复制

isPrototypeOf

构造函数的原型对象自带的函数属性, 用于检测目标对象的原型链中是否存在构造函数的原型对象。

function Baz () {}var baz = new Baz();Baz.prototype.isPrototypeOf(baz);Function.prototype.isPrototypeOf(baz);Object.prototype.isPrototypeOf(baz);

登录后复制

获取对象原型 Object.getPrototypeOf proto

var o = {};var prototype = Object.getPrototypeOf(o);console.log(prototype === Object.prototype); // return true// 部分浏览器有效var o2 = {};console.log(o2.proto === Object.prototype); // return true

登录后复制

设置对象原型 Object.create Object.setPrototypeOf

Object.create

返回一个对象,并设置它的原型

function Foo () {} function Bar () {} Foo.prototype.foo = 'foo'; Bar.prototype = Object.create(Foo.prototype);  Bar.prototype.constructor = Bar; // 修正原型链的constructor var o = new Bar(); console.log(o.foo); // return foo; console.log(o instanceof Bar); // return true

登录后复制

Object.setPrototypeOf

直接设置对象的隐式原型proto

function Foo () {} Foo.prototype.name = 'foo'; var o = Object.create(null); Object.setPrototypeOf(o, Foo.prototype); console.log(o.name); // return foo

登录后复制

小结

对象具有许多考验开发者的一些知识点。能够完全理解并整理出来是不容易的。后续我会针对对象的继承做个详细的介绍。感谢你对脚本之家的支持。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

Angular2 父子组件通信方式

Node.js的非对称加密详解

CSS3实现倾斜和旋转动画效果

以上就是JS中Object对象的原型的使用方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2779849.html

(0)
上一篇 2025年3月8日 15:52:33
下一篇 2025年3月8日 15:52:42

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js字符串如何实现截取函数slice()、substring()、substr()

    在js中字符截取函数有常用的三个slice()、substring()、substr()了,下面我来给大家介绍slice()、substring()、substr()函数在字符截取时的一些用法与区别吧。 取字符串的三个函数:slice(st…

    编程技术 2025年3月8日
    200
  • js动态操作表格

    这次给大家带来js动态操作表格,使用js动态操作表格的注意事项有哪些,下面就是实战案例,一起来看一下。 关于js对表格进行逐行添加,今天抽空整理了一下:新建一个html文件(没有编辑器的可以新建一个demo.txt文件,然后改后缀名为dem…

    2025年3月8日
    200
  • Vue的shopCart组件使用方法

    这次给大家带来Vue的shopCart组件使用方法,使用Vue的shopCart组件注意事项有哪些,下面就是实战案例,一起来看一下。 一、shopCart组件 (1) goods 父组件和 子组件 shopCart 传参 deliveryP…

    编程技术 2025年3月8日
    200
  • JS如何实现禁止浏览器回退

    本文主要和大家分享JS如何实现禁止浏览器回退,主要以代码形式,希望能帮助到大家。 //禁止浏览器的回退$(function() {if (window.history && window.history.pushState)…

    编程技术 2025年3月8日
    200
  • JS获取图片的top N色值方法

    这次给大家带来JS获取图片的top N色值方法,JS获取图片top N色值的注意事项有哪些,下面就是实战案例,一起来看一下。 题目要求 找出一个页面中出现次数最多的标签!!! 个人解法: var eles = document.getEle…

    2025年3月8日
    200
  • D3.js创建物流地图

    这次给大家带来D3.js创建物流地图,D3.js创建物流地图的注意事项有哪些,下面就是实战案例,一起来看一下。 示例图 制作思路 需要绘制一张中国地图,做为背景。 需要主要城市的经纬坐标,以绘制路张起点和终点。 接收到物流单的城市,绘制一个…

    2025年3月8日
    200
  • ejsExcel模板在Vue.js中的使用

    这次给大家带来ejsExcel模板在Vue.js中的使用,ejsExcel模板在Vue.js中使用的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是ejsExcel? ejsExcel是一款国人开发的、在Node.js应用程序中使用…

    2025年3月8日 编程技术
    200
  • JS如何做出公共子序列

    这次给大家带来JS如何做出公共子序列,JS实现公共子序列的注意事项有哪些,下面就是实战案例,一起来看一下。 介绍 最长公共子序列(Longest Common Subsequence LCS)是从给定的两个序列X和Y中取出尽可能多的一部分字…

    2025年3月8日 编程技术
    200
  • Web应用开发为什么选择Node.js

    这次给大家带来Web应用开发为什么选择Node.js,Web应用开发选择Node.js的注意事项有哪些,下面就是实战案例,一起来看一下。 一项颠覆性的技术进入技术市场总会带来一阵震惊,但随之而来往往是被放弃。然而,Node.js 当然不是这…

    2025年3月8日 编程技术
    200
  • JS的策略模式使用详解

    这次给大家带来JS的策略模式使用详解,使用JS策略模式的注意事项有哪些,下面就是实战案例,一起来看一下。 策略模式的概念引用: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法…

    2025年3月8日
    200

发表回复

登录后才能评论