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

目录

作用

原型链

引用类型: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

相关推荐
oioihoii7 分钟前
C++数据竞争与无锁编程
java·开发语言·c++
DigitalOcean8 分钟前
加速 JavaScript 开发:DigitalOcean 应用托管现已原生支持 Bun
javascript
资生算法程序员_畅想家_剑魔8 分钟前
Java常见技术分享-16-多线程安全-并发编程的核心问题
java·开发语言
We....8 分钟前
Java SPI 机制
java·开发语言
Macbethad12 分钟前
区块链技术在分布式系统中的应用实践技术报告
开发语言·c#
零雲27 分钟前
Java面试:@Component和@Bean的区别是什么
java·开发语言·面试
Jerry404_NotFound1 小时前
工厂方法模式
java·开发语言·jvm·工厂方法模式
微风欲寻竹影1 小时前
深入理解Java中的String
java·开发语言
用户6802659051191 小时前
如何利用 Endpoint Central 提高企业终端管理效率
javascript·后端·面试
代码or搬砖1 小时前
TransactionManager 详解、常见问题、解决方法
java·开发语言·spring