JS原型

2017-07-20  本文已影响21人  凌雲木

一直没专门看过js的原型是啥,一直用以往的面向对象的c#语言去使用理解它,今天发现还是稍许不同。

//构造函数声明对象

function Car(name) {

  this.name = name;//name属性

  this.istrue = function () {//istrue方法

  return 'true';

  }

}

//使用new操作符来调用构造函数,并返回对象实例。

//实例one

var one = new Car("Lamborghini");

//实例two

var two = new Car("Wuling Sunshine");

//实例three

var three = new Car("Lamborghini");

//对象Car中的istrue方法,必定返回true,可是Car对象实例化形成的对象one和two,这两个的istrue

//方法,虽说返回值都是true,但在对象one和two中istrue方法的本质是不一样的

alert(one.istrue == two.istrue);//false

alert(one == three);//false,即使one和three在实例化时传的参数一样,本质上还是两个对象

alert(one.name == three.name);//true

上面代码中,一个构造函数Car生成了的对象实例间不能共享方法,也就是说,每当你使用new来调用构造函数实例化一个对象时,

都会创建一个istrue方法。这既没有必要,浪费性能资源,因为所有istrue方法的结果都一样,返回true,完全可以在实例化对象之间共享。

所以,Javascript构造函数的缺点就是:同一个构造函数的对象实例之间无法共享方法

若想在对象实例间共享方法,可以把istrue方法添加在Car的原型对象上,如下:

Car.prototype.istrue = function () {

return "true";

}

//再次判断

console.log(one.istrue);

console.log(two.istrue);

console.log(one.istrue==two.istrue);//返回true

3未完待续

上一篇 下一篇

猜你喜欢

热点阅读