美文网首页
Js中构造函数和Prototype属性区别

Js中构造函数和Prototype属性区别

作者: Jesse_001 | 来源:发表于2018-09-19 18:31 被阅读0次

构造函数模式

//构造函数模式
function Dog(name,color) {
    this.name = name;
    this.color = color;
    this.type = "犬科动物";
    this.eat = function() {
        console.log(this.color+"色的小狗"+this.name+"在吃东西。");
    }
}
var dog1 = new Dog("贝贝","黑");
var dog2 = new Dog("兜兜","黄");
console.log(dog1.type); //犬科动物
dog2.eat(); //黄色的小狗兜兜在吃东西。
console.log(dog1.type==dog2.type); //true,值比较,所以相等
console.log(dog1.eat==dog2.eat); //false,因函数不是同一个引用地址

构造函数生成的每个实例都会重新生成一模一样的内容对象
优点:语法简单直观,便于调用函数内私有变量
缺点:多占用内存,降低效率

Prototype模式

//Prototype模式
function Dog_Proto(name,color) {
    this.name = name;
    this.color = color;
}
Dog_Proto.prototype.type = "犬科动物";
Dog_Proto.prototype.eat = function() {
    console.log(this.color+"色的小狗"+this.name+"在吃东西。");
}
var dog_p1 = new Dog_Proto("贝贝","黑");
var dog_p2 = new Dog_Proto("兜兜","黄");
console.log(dog_p1.type);//犬科动物
dog_p2.eat();//黄色的小狗兜兜在吃东西。
console.log(dog_p1.type==dog_p2.type); //true
console.log(dog_p1.eat==dog_p2.eat); //true,指向同一个内存地址,所以相等
console.log(dog_p1.__proto__ == dog_p2.__proto__); //true;

Prototype模式下的实例对象会共享同一个原型对象,所有实例的type属性和eat()方法,都是指向通一个内存地址,_proto_ 属性指向同一个Object对象
优点:实例共享原型对象,节省内存
缺点:语法复杂,不直观

相关文章

  • Js中构造函数和Prototype属性区别

    构造函数模式 构造函数生成的每个实例都会重新生成一模一样的内容对象优点:语法简单直观,便于调用函数内私有变量缺点:...

  • 原型链继承

    构造函数的prototype属性 实例和构造函数和原型父构造函数的实例作为子构造函数prototype属性,则实现...

  • JS原型

    JS原型 构造函数和对象 函数的prototype 函数具有prototype属性,它的指向是什么呢?答案是: 它...

  • prototype小结

    ### prototype 小结 - 构造函数有prototype属性指向其对应的原型对象: ```js // a...

  • Javascript原型与原型链的理解

    说明 prototype属性​ prototype 存在于构造函数中 (其实任意函数中都有,只是不是构造函数的时候...

  • 3-javascript 构造函数

    js中面向对象编程是基于构造函数(consstructor)和原型链(prototype)的。 构造函数作为对象的...

  • js类的封装

    js中,每一个构造函数都有一个prototype,指向另一个对象,这个对象的所有属性和方法,都会被构造函数的实例继...

  • JS - 原型,prototype 和 __proto__

    原型和原型链是JS实现继承的方式。除了箭头函数,其它函数身上都有prototype属性。当该函数作为构造函数生成对...

  • JavaScript面向对象(三)

    prototype 属性 在 JavaScript 中,每个对象的构造函数都有一个 prototype 属性。该属...

  • JS组合继承(寄生继承)

    js中new和Object.create的区别(简单描述): new 产生的实例,优先获取构造函数上的属性;构造函...

网友评论

      本文标题:Js中构造函数和Prototype属性区别

      本文链接:https://www.haomeiwen.com/subject/jpainftx.html