在js中我们通过自定义方法来创建对象时,或者其他情况,都会遇到几个对象有共同的方法,但是在浏览器的解析中虽然方法时同样的,但不是同一个,就会占用内存,所以为了数据共享,不浪费空间,我们通过原型来添加方法,对象的一个属性prototype同样它也是一个对象。
function Person(name, age) {
this.name = name;
this.age = age;
}
//通过原型来添加方法
Person.prototype.eat = function () {
console.log("吃烤鱼")
}
这是实例对象所访问的eat方法就是共享的,同一个eat,不占用多余的空间。
关于原型的改变
上面添加了原型方法,接下来我们试着去改变
在后边加上改变的代码
function Person(name, age) {
this.name = name;
this.age = age;
}
//通过原型来添加方法
Person.prototype.eat = function () {
console.log("吃烤鱼");
}
Person.prototype = {
play: function () {
console.log(this)
}
}
var per = new Person();
per.eat();//报错
per.play();
这时打开网页,它会报错
Uncaught TypeError: per.eat is not a function
很简单,在原型改变后再去添加方法就不会错了
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype = {
play: function () {
console.log(this)
}
}
Person.prototype.eat = function () {
console.log("吃烤鱼");
}
var per = new Person();
per.eat();//不报错 等会解释
per.play();