代码:
<!-- 對js中引用以及protoptype的探索 -->
<script>
function pro_test() {
}
pro_test.prototype = {
data: 1
}
p1 = new pro_test()
p2 = new pro_test()
p1.data = 2
p3 = new pro_test()
p2.data = 3
p4 = new pro_test()
console.log('' + p1.data + p2.data + p3.data + p4.data)
// 結果為2311 23為實例對象對prototype的覆蓋
pro_test.prototype = {
data: 5
}
console.log('' + p1.data + p2.data + p3.data + p4.data)
// 結果為2311 pro_test 此時的prototype指向新的data=5的object
// 但原先的pro_test中的prototype的指針仍指向當初data=1的object
p5 = new pro_test()
console.log('' + p1.data + p2.data + p3.data + p4.data + p5.data)
// 結果為23115,新的pro_test實例中的prototype指針指向的是data=5的新實例
function pro_test_next() {
}
pro_test_next.prototype = pro_test.prototype
pro_test_next.prototype.data = 9
p6 = new pro_test()
console.log('' + p1.data + p2.data + p3.data + p4.data + p5.data + p6.data)
// 結果為231199,pro_test_next中的prototype指向的是同一個實例
// 因此通過對pro_test_next指針指向的實例的修改會影響到pro_test實例中
</script>
运行结果
2311
2311
23115
231199