对象构造器与原型

每个原型链的终点为Object,Object的原型为null.

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

1.每个函数都有一个prototype属性指向原型对象。

2.函数的原型对象开始时只有constructor属性,当函数作为构造函数时,constructor属性指向原函数

3.使用构造函数创建对象实例时:

1)创建一个空对象{}

2)空对象{}的原型为构造函数的prototype属性指向的原型对象

3)  将创建的对象传递给函数的隐式参数this

4)  this指向的对象构造函数的上下文,并通过this初始化实例对象。

5)继承:

  1)通过对象直接继承。objectA想继承objectB,则可以通过内置方法Object.setPrototypeOf(objectA, objectB),将objectA的原型指向objectB

  2)通过构造函数继承。(JS的继承真的太绕了,虽然是继承,但是继承得不明显)

function Person(name){
    this.name = name
}    

Person.prototype.eat = function(food){
    console.log("i'm eating" + food)  
}
var humnen = new Person("Jone");
hunmen.eat("beef")
//Person构造方法中并没有eat方法。
//Person原型中有eat方法,所以humen对象可以在原型链中找到eat方法,相当于从Person.prototype对象中继承了eat方法。

  3)给构造函数添加方法即可实现类的静态方法。函数为一类对象

function Person(age){
   this.age = age      
}

Person.compareAge = function(p1, p2){
  return p1.age - p2.age;  
}

6)通过Object.defineProperty(Person, "height", {

  configurable: false,

  enumerable: false,

  value: 180,

  writable: true

})

配置对象的属性,以及getter, setter函数

7)humern instanceof Person 中 instanceof运算符是根据运算符左边的对象(humen)的原型链中是否存在运算符右边的构造函数(Person)的原型对象。

原文地址:https://www.cnblogs.com/lyc10/p/13227925.html