美文网首页
[JavaScript基础] 原型,原型链,call/apply

[JavaScript基础] 原型,原型链,call/apply

作者: Darkdreams | 来源:发表于2018-12-05 17:33 被阅读0次

原型 prototype

  1. 定义:原型是function对象的是一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。

构造函数的区别:命名大驼峰式

function Person() {
  //代码
}
var person = new Person(); //构造函数产生一个对象
//构造函数多次调用,可产生多个相似且独立的对象。
var person1 = new Person();
···
  1. 利用原型的特点和概念,可以提取共有属性。
//构造函数
function Person(name, age) {
    this.name = name;
    this.age = age;
}
// 提取原型中相同的属性和方法。
Person.prototype = {
    height : 180,
    weight : 200,
    say : function() {
        console.log("abcd")
    }
}
// 调用构造函数
var person1 = new Person("abc", 18);
var person2 = new Person("cba", 28);
  1. 对象如何查看原型
    隐式属性__proto__
    每一个对象都有一个隐式的属性,__proto__,且__proto__都指向对象的原型prototype
Chrome控制台

__proto__是可修改的,可修改对象指向的原型

function Person() {
 
}
var obj = {
  name: "abc"
}
var person = new Person(); //
person.__proto__ = obj;  //修改person方法原型指向
console.log(person.name)  //abc
  1. 对象如何查看对象的构造函数 constructor
function Person() {
  
}
function Car() {

}
var car = new Car();
car.constructor = Person()

原型链

增、删、改、查

子孙无法修改父级原型的属性

Grandpa.prototype.lastName = "Tim";
function Grandpa() {

}
var grandpa = new Grandpa();

Father.prototype = grandpa;
function Father() {

}
var father = new Father();

Son.prototype = father;
function Son() {

}
var son = new Son();

原型链的最顶端指向Object.prototype


call/apply

改变this指向

相同点:

call()apply()的第一个参数都是改变this指向。

不同点:

call() 需要把实参按照形参的个数传进去。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

var person = new Person("Tim",20);

function Student() {
  Person.call(this, "Tom",10)
}

var student = new Student()

apply() 需要传一个arguments数组

function Person(name, age) {
  this.name = name;
  this.age = age;
}

var person = new Person("Tim",20);

function Student() {
  Person.apply(this, ["Tom",10])
}

var student = new Student()

JavaScript可正常计算范围,小数点前16位,后16位。

相关文章

网友评论

      本文标题:[JavaScript基础] 原型,原型链,call/apply

      本文链接:https://www.haomeiwen.com/subject/nseqqqtx.html