Java Script 原型链原理与继承

Java Script 原型链原理与继承

所有对象都有隐式原型;

原型也是对象,也有隐式原型.

function User() {}
console.log(User.prototype);

Java Script 原型链原理与继承

function User() {}
var u = new User();
console.log(u.hasOwnProperty);

Object.prototype.hasOwnProperty

因为Object的原型上有这个函数,所以同一条原型链上的u1也能使用它.

console.log(u.hasOwnProperty === Object.prototype.hasOwnProperty);

Object.prototype.a = 1;
function User() {}
var u = new User();
console.log(u.a);

Object.prototype.a = 1;
function User() {}
var u = new User();
var arr = [1, 2, 3];
console.log(arr.a);
因此,在Object的原型上加上任何一个成员,就会影响所有的对象.

Java Script 原型链原理与继承

var sum = new Function(“a”, “b”, “a+b”);
console.log(sum.proto === Function.prototype);

自定义函数的隐式原型===function的原型.

console.log(sum.call === Function.prototype.call);
函数sum new的是Function,所有函数sum的隐式原型===Function的原型.

Function 函数,浏览器自带的,所有函数通过 new 它演化出来的.

想影响所有对象,就在Object的原型上加;想影响所有函数就在Function的原型上加.

Function.prototype.isFunc = true;
function sum() {}
console.log(sum.isFunc);

在Object原型上加东西,影响所有对象;
在函数原型上加东西,影响所有函数;
在自定义函数原型上加东西,影响所有自定义函数.

var arr = [2, 3, 5, 7, 89];
console.log(arr instanceof Array);
判断左边是否等于右边,输出是或否

console.log(Object.getPrototypeOf(arr1));
console.log(Object.getPrototypeOf(arr1) === Array.prototype);
得到对象的隐式原型.

var obj = {
2: 3,
b: 4,
c: 2,
};
obj.proto = null;
console.log(obj);
得到一个没有隐式原型的对象;禁用

var obj = Object.create(null);
obj.a = 1;
obj.b = 5;
console.log(obj);
create 往里面传值 改变隐式原型的指向

var obj = { a: 2, b: 3 };
Object.setPrototypeOf(obj, null);

obj.proto = 123;
等同于
Object.setPrototypeOf(obj, 123);
设置obj的隐式原型为null

继承

  1. 逻辑:A不一定是B,但B一定是A,则:B继承A、A派生B、A是B的父类、B是A的子类
  2. 子类的实例应该自动拥有父类的所有成员
  3. 单根性:子类最多只有一个父类
  4. 传递性:间接父类的成员会传递到子类中
  5. 处理构造器内部的重复;
  6. 处理原型上的重复.

Original: https://www.cnblogs.com/566adsasdw55/p/16738549.html
Author: 星空丽影
Title: Java Script 原型链原理与继承

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598652/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球