JS原型详解说明

本文主要和大家分享JS原型详解说明,原型的5个规则,希望本文能帮助到大家。

所有的引用类型(数组,对象,函数),都具有对象特性,即可自由扩展属性(除了“null”)

var obj ={};obj.a=100//100var arr=[];arr.a=100//100function fn(){}fn.a=100//100

登录后复制

所有的应用类型,都有一个proto属性(隐式原型),属性值是一个普通的对象

console.log(obj.__proto__);//{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}console.log(arr.__proto__);//[constructor: ƒ, concat: ƒ, pop: ƒ, push: ƒ, shift: ƒ, …]console.log(fn.__proto__);//ƒ () { [native code] }

登录后复制

所有的函数都有一个prototype属性(显式原型),属性值也是一个普通对象

console.log(fn.prototype)//{constructor: ƒ}

登录后复制

所有的引用类型的 proto属性值指向它的构造函数prototype属性值(即所有引用类型的隐形原型指向他的构造函数的显式原型)

console.log(obj.__proto__===Object.prototype);  //true//Object是一个构造函数

登录后复制

当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去他的proto(即它的构造函数的prototype)中寻找

/*测试*/function Foo(name,age){    this.name = name;}Foo.prototype.alertName = function(){//由于Foo.prototype本身也是一个对象,而对象是可以自由扩展属性的    alert(this.name);}var f = new Foo('zhan');f.printName = function(){    console.log(this.name);}f.printName();//zhan 可以直接在这个对象中找到这个属性f.alertName();//alert弹出zhan 这时候在这个对象本身找不到这个属性,去Foo.prototype找,得到值/*******************************//*之前在牛可网碰到到一道面试题*/var A = {n:4399};var B = function(){    this.n = 9999;}var C = function(){    var n = 8888;}B.prototype = A;C.prototype = A;var b = new B();var c = new C();A.n++;console.log(b.n);//9999console.log(c.n);//4400//先从他的实例中找,找不到去它的构造函数的prototype中找

登录后复制

this

对上面测试代码来说,永远指向对象本身,所以执行f.alertName
可以弹出zhan

循环自身的属性

还是对上面的测试代码来说,如果对进行循环的话,可以找到,name属性,alertName属性,printName属性,但是一般情况下,我们只希望得到这个对象自身定义的属性,比如:name属性与printName属性

var itemfor(item in f){    if(f.hasOwnProperty(item)){        console.log(item);     // 高级浏览器已经在forin中屏蔽了来自原型的属性     //但在这里建议大家还是加上这个判断,保证程序的健壮性(程序对于规范要求以外的输入情况的处理能力)    }}

登录后复制

相关推荐:

实例解析js原型和call()

JS原型继承四步曲

关于js原型链的7篇文章推荐

以上就是JS原型详解说明的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月8日 17:33:38
下一篇 2025年3月6日 02:15:15

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

相关推荐

  • angularJS模块化技术详解

    本文主要和大家分享angularJS模块化技术详解,希望能帮助到大家。 1、directive 指令 var app = angular.module(‘test’,[]); app.controller(‘con1’,function($…

    编程技术 2025年3月8日
    200
  • js中undefined实例解析

    在我们开发的时候,经常会遇到undefined的情况,本文主要和大家分享js中undefined问题的总结,希望能帮助到大家。  //1.变量声明了但是没赋值 解析器会给一个默认值 就是undefined    var a;    cons…

    编程技术 2025年3月8日
    200
  • js变量提升详解

    1.JavaScript代码执行分为两个阶段: 预解析阶段:在预解析阶段,js会对以var声明的变量,和function开头的语句块进行提升,将var声明的变量和function 提升至代码的最前面。需要注意的时,function整体提升,…

    编程技术 2025年3月8日
    200
  • div显示2秒后自动消失js代码分享

    本文我们主要和大家分享div显示2秒后自动消失js代码,利用settimeout(),settimeout()方法用于在指定的毫秒数后调用函数或计算表达式。希望能帮助到大家。 在做四象限的过程中会有提示的信息,但是想让提示信息在一定的时间后…

    2025年3月8日
    200
  • js清空input file上传文件的内容代码

    本文主要和大家分享几行js代码,关于js清空input file上传文件的内容如何实现,希望能帮助到大家。 html页面代码如下: 登录后复制 js的代码如下,可以直接将上传文件input按钮的内容直接清空: var obj=documen…

    编程技术 2025年3月8日
    200
  • js如何添加点击事件

    本文给大家分享js追加html,如何添加点击事件,希望本文代码能帮助到大家。 $(“#product”).on(“click”, “.items”, function () {    $.app.product.displayProduct…

    编程技术 2025年3月8日
    200
  • JS中兼容性问题处理方法

    本文主要和大家分享JS中兼容性问题处理方法,希望能帮助到大家。 1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题  我们都知道js通过style不可以获取行外样式,当我们需要获取行外样式…

    编程技术 2025年3月8日
    200
  • js普通函数和构造函数详解

    本文主要和大家分享js普通函数和构造函数,希望能帮助大家更好理解什么是js普通函数和构造函数。 1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2、构造函数和普通函数的区别在于:调用方式不一样 3、普通函数…

    2025年3月8日 编程技术
    200
  • js关于嵌套for循环实例

    javascript嵌套for循环内层如何break或continue外层的for循环呢?很简单,可以给外层for循环加上标签,break或continue的时候加上对应的标签名就可以了: outer: // 给外层的for循环加上标签,取…

    编程技术 2025年3月8日
    200
  • js栈、队列、链表数据结构的实现代码分享

    数据结构有讲过,栈是一种遵从后进先出原则的有序集合,书中对栈的形容非常到位,就像是堆盘子,先放的肯定在下面的位置,最上面的是才放的。给栈内添加元素,最先添加的在栈底,最后一个加进去的称为栈顶元素。 js实现栈及其方法 具体内容有 创建栈:在…

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论