js中的原型及原型链

面向对象

typeof

  • 检测数据类型 typeof返回的都是字符串
  • 基本数据类型 number string boolean undefined symbol
  • 引用类型 null {} [] /&$/ Date => object

隐式原型

proto

每个对象都有一个proto属性,指向创建该对象的函数的prototype。

Object.prototype__proto__指向的是null

image.png

image.png

自定义函数的prototype

自定义函数的prototype的proto指向的就是Object.prototype

image.png

自定义函数

instanceof

  • instanceof运算符的第一个参数是一个对象,第二个参数一般是一个函数
  • instanceof的判断规则是: 沿着对象的__proto__这条链来向上查找找,如果能找到函数的prototype则返回true,否则 返回false

image.png

测试题

function Foo() {
  getName = function () {
      console.log(1);
  }
  return this;
}
Foo.getName = function () {
  console.log(2);
}
Foo.prototype.getName = function () {
  console.log(3);
}
var getName = function () {
  console.log(4);
}
function getName() {
  console.log(5);
}
Foo.getName();
getName();
Foo().getName();
getName();//1
new Foo.getName();
new Foo().getName();
new new Foo().getName();
// 2 4 1 1 2 3 3


function Foo() {
  getName = function () {
      console.log(1);
  }
  return this;
}
Foo.getName = function () {
  console.log(2);
}
Foo.prototype.getName = function () {
  console.log(3);
}
var getName = function () {
  console.log(4);
}
function getName() {
  console.log(5);
}
Foo.getName();
getName();
Foo().getName();
getName();//1
new Foo.getName();
new Foo().getName();
new new Foo().getName();
// 2 4 1 1 2 3 3