instanceof不是根据构造函数进行判断,而是原型链

instanceof,A instanceof B 判断B.prototype对象能否在A的原型链上找到

function foo(){}
console.log(foo.__proto__); //foo.__proto__为Function.prototype,foo.__proto__.__proto__为Object.prototype
console.log(foo instanceof foo);//false

function foo(){
  return [1];
}
var a=new foo();
console.log(a); //[1]
console.log(a instanceof foo);//false

function foo(){
  return this;
}
var a=new foo();
console.log(a); //a类型为Object
console.log(a instanceof foo);//true

function foo(){
  return foo;
}
var a=new foo();
console.log(a); //a类型为Function
console.log(a instanceof foo);//false

时间: 2024-08-22 08:52:57

instanceof不是根据构造函数进行判断,而是原型链的相关文章

【设计模式+原型理解】第二章:基于构造函数扩展出来的原型模式

在第一章的时候,说过了单例模式.工厂模式.构造函数模式,你还记得构造模式是怎么样的吗? function CreateJsPerson(name, age) { this.name = name; this.age = age; this.writeJs = function() { console.log("my name is " + this.name + ", i can write js."); } } var p1 = new CreateJsPerso

JS创建对象模式及其对象原型链探究(五):组合使用构造函数模式和原型模式

组合使用构造函数模式和原型模式 构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性. 创建自定义类型的最常见方式,就是组合使用构造函数模式和原型模式. 1.创建对象 // 组合使用构造函数模式和原型模式 function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.friend = ["Jenny", "Court"]; } Person.p

js 单例模式的实现方式----闭包和构造函数内部判断

闭包: var singleton = function( fn ){ var result; return function(){ return result || ( result = fn .apply( this, arguments ) ); } }//test function aa(){} var a = aa() var b = aa() a===b 构造函数内部判断 function Construct(){ // 确保只有单例 if( Construct.unique !==

JS中面向对象的,对象理解、构造函数、原型、原型链

6.1 理解对象 6.1.1 对象属性类型 ECMS属性有两种类型:数据属性和访问器属性 1 数据属性 [[configurable]] 表示能否通过Delete 删除属性从而从新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性.对象上定义的属性默认值为true [[enumerable]] 表示能否通过for-in循环返回属性.直接在对象上定义的属性,它们的这个特性默认值为true [[writable]] 表示能否修改属性值.像前面例子中那样直接在对象上定义的属性,它们默认值为t

JavaScript原型链和instanceof运算符的暧昧关系

时间回到两个月前,简单地理了理原型链.prototype以及__proto__之间的乱七八糟的关系,同时也简单了解了下typeof和instanceof两个运算符,但是,anyway,试试以下两题: console.log(Function instanceof Function); console.log(String instanceof String); 如果无法得出准确答案,跟着楼主一起温故而知新吧. 温故 我们经常用typeof运算符来判断一个变量的类型,也确实挺好用,能判断出numb

JavaScript提高篇之面向对象之单利模式工厂模型构造函数原型链模式

1.单例模式 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>面向对象之单例模式</title> 6 </head> 7 <body> 8 9 <script type="text/javascript"> 10 //对象数据类型

JavaScript——原型链 — instanceof

//构造函数 function Fn (name,age) { this.name = name; } //显示原型 Fn.prototype.alertName = function () { alert(this.name); } //创建实力 var f = new Fn('clm'); f.printName = function () { console.log(this.name); } f.printName();// clm f.alertName();// clm //要去 f

javascript教程50:认识instanceof 与 原型链

1 instanceof: 1.1 普通使用下: 判断一个对象是否是某个构造函数的实例: 语法 : 对象 instanceof 函数 是则返回true,不是则返回false. console.log(obj instanceof Object); 1.2 高级用法: 判断一个函数的原型对象,是否在实例对象的原型链上 1.3 案例如下: var arr = []; console.log(arr instanceof Array); //true console.log(arr instanceo

面向对象(2 )构造函数 原型 原型链的理解

面向对象(2) 原型 原型链的理解 1.面向对象的目的就是生成对象object. 2.生成对象的方式 (1)单例模式(字面量定义)var obj={} (2)类的实例 var obj=new Object() (3)工厂模式 (4)构造函数 工厂模式和构造函数的区别? 工厂模式,生成的对象必须要返回,构造函数模式不用return,构造函数模式默认return旳是this,在构造函数内的this就是实例对象. 构造函数如果人为return的不是对象,直接忽略,如果人为return的是对象,就取代t