原型规则
- 所有的引用类型(数组、对象、函数), 都具有对象特性,即可自由扩展属性。
- 所有的引用类型(数组、对象、函数), 都有一个
__proto__
属性,属性值是一个普通对象。 - 所有的函数,都有一个
prototype
属性,属性值也是一个普通的对象。 - 所有的引用类型(数组、对象、函数),
__proto__
属性值指向它的构造函数的prototype
属性值。 - 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的
__proto__
(即它的构造函数的prototype
)中寻找。
f instanceof Foo的判断逻辑
f
的__proto__
一层一层往上,能否对应到Foo.prototype
。
判断数组
Array.isArray(arr)
Object.prototype.toString.call(arr) === "[object Array]"
描述new一个对象的过程
- 创建一个新对象
- this指向这个新对象
- 执行代码,即对this赋值
- 返回this
原型DEMO
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="div1">32434</div>
<script>
function Elem(qs) {
this.elem = document.querySelector(qs)
}
Elem.prototype.html = function(val) {
var elem = this.elem
if(val) {
elem.innerHTML = val
return this
} else {
return elem.innerHTML
}
}
Elem.prototype.on = function(type, fn) {
var elem = this.elem
elem.addEventListener(type, fn)
}
var div1 = new Elem('#div1')
console.log(div1.html())
div1.html('我被改了啊').on('click', function() {
alert('clicked')
})
</script>
</body>
</html>
网友评论