网站首页 > 技术文章 正文
这篇文章主要说原型及原型链,鉴戒了一些网络大神的想法,有什么疑问可以提出来大家一起共同解决
1. 原型的五条规则
- 所有的引用类型都可以自定义添加属性
- 所有的引用类型都有自己的隐式原型(proto)
- 函数都有自己的显式原型(prototype)
- 所有的引用类型的隐式原型都指向对应构造函数的显示原型
- 使用引用类型的某个自定义属性时,如果没有这个属性,会去该引用类型的proto(也就是对应构造函数的prototype)中去找
原型链.png
function Foo(name) { this.name = name; // return this; // 本身会执行这一步 } Foo.prototype.alertName = function() { alert(this.name); } var f = new Foo('shiyanping'); f.printName = function() { console.log(this.name); } f.alertName(); // f.__proto__ -> Foo.prototype f.printName(); console.log(f.toString()); // f.__proto__.__proto__
2. 如何准确判断一个变量是数组类型
arr instanceof Array
instanceof判断一个引用类型是什么引用类型,是通过proto(隐式原型一层一层往上找,能否找到对应构造函数的prototype)
3. 写一个原型链继承的例子
function Element(ele) { this.ele = document.getElementById(ele); } Element.prototype.html = function(val) { var ele = this.ele; if (val) { ele.innerHTML = val; return this; } else { return ele.innerHTML; } }; Element.prototype.on = function(type, fn) { var ele = this.ele; ele.addEventListener(type, fn); return this; } var element = new Element('main'); element.html('hello').on('click', function() { alert('handleClick'); });
4. 描述new一个对象的过程
- 创建一个新对象
- this指向这个新对象
- 执行代码给this赋值
- return this
function Foo(name) { this.name = name; // return this; // 本身会执行这一步 } var f = new Foo('shiyanping');
猜你喜欢
- 2024-11-10 这样理解 JS 原型链,通透 js原型链的理解
- 2024-11-10 JavaScript-原型链 javascript 原型,原型链 ? 有什么特点?
- 2024-11-10 javascript原型链 js原型链的用处
- 2024-11-10 js 原型/原型链/构造函数/实例/继承
- 2024-11-10 【JavaScript 高级】深入了解原型链
- 2024-11-10 快速读懂JavaScript中的原型链 js的原型和原型链是什么
- 2024-11-10 你可能不太理解的JavaScript - 原型与原型链
- 2024-11-10 我在jacascript中学习到的那些原型链,你知道吗?
- 2024-11-10 JavaScript中的原型prototype和__proto__的区别及原型链概念
- 2024-11-10 面试问题分享 - 5:解释一下 原型、构造函、实例、原型链 之间的关系
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-