看教程学到高级js编程 提到原型对象和对象原型,发现一个小问题
代码如下:
function Star(uname, age) {
this.uname = uname
this.age = age
}
Star.prototype = {
constructor: Star,
sing: function () {
console.log('我会唱歌')
},
movie: function () {
console.log('我会演电影')
}
}
var ldh = new Star('刘德华', 18)
var zxy = new Star('张学友', 19)
console.log(Star.prototype)
我如果不用constructor:Star依然可以正常用时 ldh.uname age和sing movie方法,我知道如果没有constructor:Star
那么,Star.prototype就没有constructor(被Star.prototype这行代码覆盖掉了),我不理解的是,我能够正常使用ldh zxy 的对象和方法为什么还要重新,在prototype中constructor:Star呢?
“constructor属性不影响任何JavaScript的内部属性。constructor其实没有什么用处,只是JavaScript语言设计的历史遗留物。由于constructor属性是可以变更的,所以未必真的指向对象的构造函数,只是一个提示。不过,从编程习惯上,我们应该尽量让对象的constructor指向其构造函数,以维持这个惯例。 目前看到的作用之一,通过实例的构造函数给闭包中的函数增加属性方法。
你在里面写constructor:Star的目的是为了指回你的Star构造函数,constructor在这里设置不设置都不影响你正常访问实例对象的属性和方法,更多的是一种编程习惯。