原型链-继承

1、静态属性不能被继承

2、每个对象都有一个原型属性__proto__,如果没有显示声明这个值默认为Object.prototype

3、内部属性[Prototype] 通过 __proto__,静态属性 prototype

4、IE浏览器不支持直接使用 __proto__

5、代码中建议用Object.getPrototypeOf() 获取,不建议直接使用__proto__

6、构造函数的实例对象都拥有指向其构造函数的Constructor属性

var obj2 = {
    name: 'aaa'
}
console.log(obj2.__proto__ === Object.prototype) // true

-----------------------------------------
var base = {
    age: 13
}
var obj2 = {
    name: 'aaa',
    __proto__: base
}
console.log(obj2.age) // 13

----------------------------------------

  var base = {
    age:13
  }
 var obj2 = Object.create(base);
  console.log(g.age); //13

function Person () {
    this.name = "xx";
}
function Son () {}
Son.prototype = new Person();
var s = new Son();
console.log(s.name) // xx
------------------------------------
function Person (name) {
    this.name = name
    this.show = function () {
        return 1;
    }
}
function Son (name) {
    Person.apply(this,arguments)
}
Son.prototype = new Person();
var s = new Son("ada");
console.log(s.name);
console.log(s.show());

 

5、原型链

function People() {}
function Person(){}
var f = new Person();
console.log(f.__proto__ === Person.prototype)
console.log(Person.__proto__ === Function.__proto__)
console.log(Function.prototype.__proto__ === Object.prototype);
console.log(Object.prototype.__proto__  === null)

console.log(f.constructor === Person)
------------------------------------------------ function People() {} function Person(){} Person.prototype = new People(); var f = new Person(); 当Person 继承 People : Person.__proto__ 指向发生改变 console.log(f.__proto__ === Person.prototype) console.log(Person.__proto__ === People.__proto__) console.log(People.__proto__ === Function.prototype) console.log(Function.prototype.__proto__ === Object.prototype); console.log(Object.prototype.__proto__ === null)

console.log(f.constructor === People)
function Mon() {
    this.name ="ada"
}
Mon.prototype.age = 34;
Mon.prototype.show = function () { } ;
console.log(b.constructor === Mon) //true
------------
construct 不再指向构造函数
Mon.prototype = {
    age: 34,
    show: function () { }
}
console.log(b.constructor === Mon) //false
需要添加:
Mon.prototype = {
    constructor: Mon,
    age: 34,
    show: function () { }
}    

 

6、判断对象是否在指定对象的原型链中:isPrototypeOf

function People() {}
function Person(){}
Person.prototype = new People();
var f = new Person();
console.log(People.prototype.isPrototypeOf(f)) // true
posted @ 2019-12-05 14:05  雨夜稻草  阅读(133)  评论(0编辑  收藏  举报