61-原型链
2019-04-25 本文已影响1人
仰望_IT
-
对象中proto组成的链条我们称之为原型链
原型链 -
注意点:
-
注意点1: 对象在查找属性和方法的时候, 会先在当前对象查找, 如果有就用自己的
function Person(myName, myAge) { this.name = myName; this.age = myAge; // 构造函数自己有的时候就用自己的属性和方法 this.currentType = "构造函数中的type"; this.say = function () { console.log("构造函数中的say"); } } Person.prototype = { // 注意点: 为了不破坏原有的关系, 在给prototype赋值的时候 // 需要在自定义的对象中手动的添加constructor属性, 手动的指定需要指向谁 constructor: Person, currentType: "人", say: function () { console.log("hello world"); } } let obj1 = new Person("lnj", 34); obj1.say(); // 构造函数中的say console.log(obj1.currentType); // 构造函数中的type
-
-
注意点2: 如果当前对象中找不到想要的, 会依次去上一级原型对象中查找
function Person(myName, myAge) { this.name = myName; this.age = myAge; // 构造函数自己没有的时候就去上一级原型对象中查找 } Person.prototype = { // 注意点: 为了不破坏原有的关系, 在给prototype赋值的时候 // 需要在自定义的对象中手动的添加constructor属性, 手动的指定需要指向谁 constructor: Person, currentType: "人", say: function () { console.log("hello world"); } } let obj1 = new Person("lnj", 34); obj1.say(); // hello world console.log(obj1.currentType); // 人
-
注意点3: 如果找到Object原型对象都没有找到, 就会报错
function Person(myName, myAge) { this.name = myName; this.age = myAge; } Person.prototype = { // 注意点: 为了不破坏原有的关系, 在给prototype赋值的时候 // 需要在自定义的对象中手动的添加constructor属性, 手动的指定需要指向谁 // constructor: Person, 上一级也找不到的时候就会去上上级查找, 如果一直找到Object都没有找到就会报错 // currentType: "人", // say: function () { // console.log("hello world"); // } } let obj1 = new Person("lnj", 34); obj1.say(); // 报错 console.log(obj1.currentType); // 报错