0
点赞
收藏
分享

微信扫一扫

原型与原型链 - 构造函数与instanceof

_LEON_ 2022-01-08 阅读 108

instanceof判断值类型

类型的判断

typeof是用于判断所有的值类型,(返回数据类型: undefined string boolean number symbol(ES6) Object Function)能识别引用类型,但是不能区分objectArray的类型

var list = [];
console.log(typeof list); // object

那如何判断数组的类型,使用instanceofinstanceof的本质是检测原型链,运算符的用处是判断值的类型。instanceof运算符返回一个布尔值boolean,表示某个对象是否为指定的构造函数的实例。

var d = new Date();
d instanceof Date // true
d instanceof Object // true

注:对于undefinednullinstanceOf运算符总是返回false

undefined instanceof Object // false
null instanceof Object // false

构造函数

构造函数与普通函数的创建方式一样,习惯上首字母大写;用于新建实例对象

function Person(name){
     this.name=name;
     this.sayHi = function() {
          alert("Hi")
     }
 }
var student1= new Person('wendy');
var student2= new Person('kim');
student1.name; // 'wendy'
student1.sayHi(); //

**缺点:**同一个构造函数的多个实例之间,无法共享属性,从而造成对系统资源的浪费。

prototype 原型的属性作用

JavaScript 的每个对象都继承另一个对象,后者称为“原型”(prototype)对象。一方面,任何一个对象,都可以充当其他对象的原型;另一方面,由于原型对象也是对象,所以它也有自己的原型。null也可以充当原型,区别在于它没有自己的原型对象。
每一个构造函数都有一个prototype属性,这个属性会在生成实例的时候,成为实例对象的原型对象。
JavaScript 继承机制的设计就是,原型的所有属性和方法,都能被子对象共享;原型链的继承机制;
在这里插入图片描述

constructor的属性

prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数
由于constructor属性定义在prototype对象上面,意味着可以被所有实例对象继承。

function P() {}
P.prototype.constructor === P // true

var p = new P();
// function P() {}
p.constructor === P.prototype.constructor
// true
p.hasOwnProperty('constructor')
// false
举报

相关推荐

0 条评论