jsp电商网站开发流程,电子商务seo是什么意思,品牌营销策略,wordpress 不能查看站点文章目录1. 原型2. 显式和隐式原型3. 原型链3.1 访问顺序4. instanceof4.1 如何判断1. 原型
函数的prototype属性
每个函数都有一个prototype属性#xff0c;它默认指向一个Object空对象#xff08;即#xff1a;原型对象#xff09;。原型对象中有一个属性constructor它默认指向一个Object空对象即原型对象。原型对象中有一个属性constructor它指向函数对象。 Person的prototype指向了它的Person PrototypePerson Prototype的constructor指向了Person 。 // 用户对象
function Person() {};console.log(Person.prototype);Person.prototype.getMoney function() {return 5000000;console.log(身价500w);
}console.log((new Person()).getMoney()); 给原型对象添加属性一般都是方法
作用函数的所有实例对象自动拥有原型中的属性方法
2. 显式和隐式原型
每个函数function都有一个prototype即显式原型属性
每个实例对象都有一个__proto__称为隐式原型属性。
对象的隐式原型的值为其对应构造函数的显式原型的值。
内存结构 // 第1步内部语句this.prototype {}
function Fn() {};console.log(Fn.prototype);// 第2步内部语句this.__proto__ Fn.prototype
let fn new Fn();console.log(fn.__proto__);
console.log(fn.__proto__ Fn.prototype);// 在原型上添加方法
Fn.prototype.test function () {console.log(invoke test...);
}
fn.test();
以上代码对应内存结构如下
总结
函数的prototype属性在定义函数时自动添加的默认值是一个空的Object对象。对象的__proto__属性创建对象的时候自动添加的默认值为构造函数的prototype属性值。可以在程序中直接操作显式原型但不能直接操作隐式原型ES6之前
3. 原型链
3.1 访问顺序
原型链隐式原型链主要用于查找对象的属性方法访问一个对象的属性时
先在自身属性中查找找到则返回如果没有在沿着__proto__这条链向上查找找到返回如果最终没找到则返回undefined console.log(Object.prototype.__proto__)function Fn() {this.test1 function() {console.log(test1())}}Fn.prototype.test2 function() {console.log(test2())}let fn new Fn();fn.test1();fn.test2();console.log(fn.toString);fn.test3();输出如下 构造函数/原型/实体对象的关系 函数的显式原型指向的对象默认是空Object实例对象但是Object不满足
所有函数都是Function的实例包含Function
Object的原型对象是原型链的尽头。
原型链的属性问题 读取对象的属性值时会自动到原型链中查找 设置对象的属性值时不会查找原型链如果当前对象中没有此属性直接添加此属性并设置其值 方法一般定义在原型中属性一般通过构造函数定义在对象本身上。 function Fn() {}
Fn.prototype.a xxx;
let fn1 new Fn();
console.log(fn1.a, fn1);let fn2 new Fn();
fn2.a yyy;
console.log(fn1.a, fn2.a, fn1)
输出如下 4. instanceof
4.1 如何判断
表达式A instanceof B 如果B函数的显式原型对象在A对象的原型链上返回true否则返回false
Function 是通过new 自己产生的实例 function Foo() {}
let f1 new Foo()
console.log(f1 instanceof Foo) // true
console.log(f1 instanceof Object) // true 完整的原型关系图