您的位置:首页 > 其它

ES6--原型及原型链

2020-06-26 04:24 99 查看

1、构造函数和原型prototype
(1)原型prototype:每个构造函数都有一个prototype属性,指向一个对象。prototype的本质也是一个JavaScript对象,称为原型对象,这个对象的所有属性和方法都会被构造函数所拥有。因此,可将共用的一些方法直接定义在prototype上,这样所有对象实例就可以共享这些方法;
(2)作用:原型prototype的作用是共享方法、节约内存;

// 1、构造函数
function Star(uname, age) {
this.uname = uname;
this.age = age;
}
// 通过原型 prototype 添加共有的方法
Star.prototype.sing = function () {
console.log("I can sing songs");
}
// 所有对象实例都可以使用 prototype 里面的共享方法
var zhangsan = new Star("zhangsan", 18);
var lisi = new Star("lisi", 20);
zhangsan.sing(); //输出 I can sing songs
lisi.sing(); //输出 I can sing songs

2、对象原型 __ proto __
对象自身的一种属性,它指向原型对象prototype,创建的对象实例里面有__ proto __,它指向构造函数的prototype,因此可以使用prototype里面的方法。

3、constructor属性
原型对象prototype和对象原型 __ proto __里面都有一个constructor属性,constructor可以指回构造函数本身。

4、原型链


5、成员查找机制
根据原型链一层与层往上找:
实例对象→→→构造函数原型对象→→→Object原型对象

6、利用prototype对内置对象进行扩展自定义方法
如数组里面有很多方法,但是没有求和方法,我们可以利用原型对象prototype对数组进行扩展:

console.log(Array.prototype); //可以查看数组原有的方法
Array.prototype.sum = function () {
let sum = 0;
for (let i = 0; i < this.length; i++) {
sum += this[i]; // this指向调用这个方法的数组
}
return sum;
}
console.log(Array.prototype); //再次查看数组的方法 可以找到有新扩展的 sum 方法
var arr = [1, 2, 3, 4]
console.log(arr.sum()); //输出 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: