原型、原型链、判断数据类型

目录

作用

原型链

引用类型:proto(隐式原型)属性,属性值是对象函数:prototype(原型)属性,属性值是对象

Function:本身也是函数

相关方法

person.prototype.isPrototypeOf(stu)

[Object.getPrototypeOf(object)替换已不推荐的object._ _ proto _ ](#Object.getPrototypeOf(object)替换已不推荐的object. _ proto _ _)

[Object.create(instance) 以一个现有对象作为原型,创建一个新对象](#Object.create(instance) 以一个现有对象作为原型,创建一个新对象)

Object.hasOwn(obj,属性):判断是否为自有属性

应用

new

[函数装饰器:在一个函数 执行前 或 执行后 添加额外的逻辑](#函数装饰器:在一个函数 执行前 或 执行后 添加额外的逻辑)

判断数据类型

运算符

[typeof:判断 基本数据类型](#typeof:判断 基本数据类型)

[typeof null=Object 类型标签均为000](#typeof null=Object 类型标签均为000)

[实例 instanceof 构造函数:判断原型链,和isPrototypeOf](#实例 instanceof 构造函数:判断原型链,和isPrototypeOf)

方法

[构造函数.prototype.isPrototypeOf(实例) :判断原型链](#构造函数.prototype.isPrototypeOf(实例) :判断原型链)

[(数据).constructor === 数据类型:不包含继承类型](#(数据).constructor === 数据类型:不包含继承类型)

[显示:toString,valueOf 除了null,undefined](#显示:toString,valueOf 除了null,undefined)

[valueOf:this 值转换成对象。除了Date都是返回数据本身](#valueOf:this 值转换成对象。除了Date都是返回数据本身)

console.log

toString:重写对象的类型转换。console.log


作用

原型被定义为给其它对象提供共享属性的对象,函数的实例可以共享原型上的属性和方法

原型链

引用类型: __proto__(隐式原型)属性,属性值是对象

函数:prototype(原型)属性,属性值是对象

javascript 复制代码
const o = {
  a: 1,
  b: 2,
  // __proto__ 设置了 [[Prototype]]。它在这里被指定为另一个对象字面量。
  __proto__: {
    b: 3,
    c: 4,
    __proto__: {
      d: 5,
    },
  },
};

// { a: 1, b: 2 } ---> { b: 3, c: 4 } ---> { d: 5 } ---> Object.prototype ---> null

console.log(o.d); // 5

Function:本身也是函数

javascript 复制代码
console.log(Function.prototype === Function.__proto__); // true

Function 本身是一个函数。而所有函数都是Function 的实例。所以 Function是Function的实例

相关方法

person.prototype.isPrototypeOf(stu)

Object.getPrototypeOf(object )替换已不推荐的object._ _ proto _ _

Object.create(instance) 以一个现有对象作为原型,创建一个新对象

Object.hasOwn(obj,属性):判断是否为自有属性

应用

new

javascript 复制代码
var a=1;
function fn1(){
  var a=2;
  console.log(this.a+a);
}
//f1并没有被作为对象的方法调用, this 指向全局对象,在浏览器中是 window
f1();//3 

function fn2(){
  var a=10;
  fn1();
}
//在 fn2 函数内部调用 fn1 函数,但是 fn1 函数内部的 this 仍然指向全局对象 window,因为 fn1 并没有被作为方法调用。
fn2();//3 

var fn3=function(){
  this.a=3;
}
fn3.prototype={
  a:4
}
var fn33=new fn3();
fn1.call(fn33)
//5

函数装饰器:在一个函数 执行前 或 执行后 添加额外的逻辑

javascript 复制代码
Function.prototype.before=function(beforefn){
  return ()=>{
    beforefn.apply(this,arguments)
    return this.apply(this,arguments)
  }
}
Function.prototype.after=function(afterfn){
  return ()=>{
    var res=this.apply(this,arguments)
    afterfn.apply(this,arguments)
    return res;
  }
}

var func=function(){
  console.log(1)
}.before(function(){
  console.log(2)
}).after(function(){
  console.log(3)
})
func()//213

判断数据类型

运算符

typeof:判断 基本数据类型

typeof null=Object 类型标签均为000

实例 instanceof 构造函数:判断原型链,和isPrototypeOf

javascript 复制代码
Object.prototype.isPrototypeOf({})// true
{} instanceof Object// true
Object instanceof Object//true
Function instanceof Function//true

方法

构造函数.prototype.isPrototypeOf(实例) :判断原型链

(数据 ).constructor === 数据类型:不包含继承类型

显示:toString,valueOf 除了null,undefined

valueOf:this转换成对象。除了Date都是返回数据本身

console.log

toString:重写对象的类型转换。console.log

相关推荐
全栈前端老曹6 分钟前
【前端地图】地图开发基础概念——地图服务类型(矢量图、卫星图、地形图)、WGS84 / GCJ-02 / BD09 坐标系、地图 SDK 简介
前端·javascript·地图·wgs84·gcj-02·bd09·地图sdk
froginwe1112 分钟前
Bootstrap4 折叠组件使用指南
开发语言
sunwenjian88612 分钟前
SpringBean的生命周期
java·开发语言
毕设源码-赖学姐34 分钟前
【开题答辩全过程】以 基于Java的游泳馆会员管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
Fairy要carry1 小时前
项目01-手搓Agent之loop
前端·javascript·python
kyriewen1 小时前
DOM树与节点操作:用JS给网页“动手术”
前端·javascript·面试
米饭同学i1 小时前
基于腾讯云COS的小程序素材上传功能实现
前端·javascript·react.js
郝学胜-神的一滴1 小时前
【技术实战】500G单行大文件读取难题破解!生成器+自定义函数最优方案解析
开发语言·python·程序人生·面试
愤豆1 小时前
02-Java语言核心-语法特性-注解体系详解
java·开发语言·python
光影少年1 小时前
如何开发一个CLI工具?
javascript·测试工具·前端框架·node.js