美文网首页
Js相关笔记-3

Js相关笔记-3

作者: 一叶偏粥 | 来源:发表于2018-02-23 16:43 被阅读0次

原型对象的constructor

修改原型对象时,一般要同时修改constructor属性的指向。

// 坏的写法 C.prototype={method1:function(...){...},// ...};

// 好的写法C.prototype={constructor:C,method1:function(...){...},// ...};

// 更好的写法C.prototype.method1=function(...){...};

上面代码中,要么将constructor属性重新指向原来的构造函数,要么只在原型对象上添加方法,这样可以保证instanceof运算符不会失真。

function P() {} P.prototype.constructor === P // true

prototype对象有一个constructor属性,默认指向prototype对象所在的构造函数。

function P() {}

var p = new P();

p.constructor === P // true

p.constructor === P.prototype.constructor // true

p.hasOwnProperty('constructor') // false

p是构造函数P的实例对象,但是p自身没有constructor属性,该属性其实是读取原型链上面的P.prototype.constructor属性。

原型链

Object.getPrototypeOf(Object.prototype) // null


原型链的尽头就是null

var MyArray = function () {};

MyArray.prototype = new Array();

MyArray.prototype.constructor = MyArray;

var mine = new MyArray();

mine.push(1, 2, 3);

mine.length // 3

mine instanceof Array // true

原型指向数组实例

Rectangle构造函数继承Shape

function Shape() {

  this.x = 0;

  this.y = 0;

}

Shape.prototype.move = function (x, y) {

  this.x += x;

  this.y += y;

  console.info('Shape moved.');

};

// 第一步,子类继承父类的实例

function Rectangle() {

  Shape.call(this); // 调用父类构造函数

}

// 另一种写法

function Rectangle() {

  this.base = Shape;

  this.base();

}

// 第二步,子类继承父类的原型

Rectangle.prototype = Object.create(Shape.prototype);

Rectangle.prototype.constructor = Rectangle;

一个对象同时继承多个对象

function M1() {

  this.hello = 'hello';

}

function M2() {

  this.world = 'world';

}

function S() {

  M1.call(this);

  M2.call(this);

}

// 继承 M1

S.prototype = Object.create(M1.prototype);

// 继承链上加入 M2

Object.assign(S.prototype, M2.prototype);

// 指定构造函数

S.prototype.constructor = S;

var s = new S();

console.log(s.hello) // 'hello:'

console.log(s.world) // 'world'

相关文章

  • Js相关笔记-3

    原型对象的constructor 修改原型对象时,一般要同时修改constructor属性的指向。 // 坏的写法...

  • Node.js 笔记二:入门及GeoNode.js GIS相关库

    Node.js 笔记二:入门及GeoNode.js GIS相关库 入门 node.js之fs模块 Node.js模...

  • js相关笔记

    js相关笔记 1.给元素添加非静态定位的定位属性时,你如果不设置它的left和top或者bottom再或者righ...

  • js相关笔记

    js相关笔记 1.给元素添加非静态定位的定位属性时,你如果不设置它的left和top或者bottom再或者righ...

  • JS相关笔记

    如何使用? 内部 外部引用 ta作为一种脚本语言可以放在html任何位置。 注释 //注释内容 OR /*注释内容...

  • Javascript原型理解(面试篇)

    本文是学习JS原型相关知识后的总结与笔记:学习文章参考《一文吃透所有JS原型相关知识点》 在面试中会被经常问到JS...

  • js基于cropper.js的图片裁剪插件

    pc端效果: 2、相关js代码都在页面上,根据自己要求修改。 3、cropper.js的参数请参考相关文档。

  • Js相关笔记-1

    持续更新,主要方便于存一些笔记。 对象 使用for...in循环,提取对象属性名var obj = { key1...

  • Js相关笔记-2

    持续更新,主要方便于存一些笔记。 闭包 function f1() { var n = 999; function...

  • JavaScript笔记

    js笔记 一、js简介1、js是什么2、js作用3、组成4、引入方式二、基本语法1、变量2、原始数据类型3、引入数...

网友评论

      本文标题:Js相关笔记-3

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