js使用构造函数的缺点

美女程序员鼓励师

1、不是原型链继承,只是借用构造函数,所以不能继承原型的属性和方法。

2、虽然构造函数中定义的属性和方法是可以访问的,但是每个实例都被复制了。

如果例子太多,方法太多,占用内存很大,那么方法就在构造函数中定义,函数的复用就无从谈起。

实例

// 父构造函数

function Father() {

    this.name = 'father'

    this.speakName1 = function () {

        console.log('speakName1')

    }

    this.speakName2 = function () {

        console.log('speakName2')

    }

    this.speakName3 = function () {

        console.log('speakName3')

    }

    this.speakName4 = function () {

        console.log('speakName4')

    }

}

// 父原型上 方法

Father.prototype.alertName = function () {

    console.log(this.name)

}

// 父原型上 属性

Father.prototype.age = 21

// 子构造函数

function Children() {

    Father.call(this)

}

 

// 创建子实例

let c1 = new Children()

// 调用原型方法,实例访问不到

c1.alertName()

// TypeError: c1.alertName is not a function

 

// 访问原型属性,实例中未定义

console.log(c1.age)

// undefined

 

// 可以访问实例属性,但是每个实例都存有自己一份 name 值

console.log(c1.name)

// father

 

// 可以访问实例方法,但是每个实例都存有自己一份 speakName1() 方法,

// 且方法过多,内存占用量大,这就不叫复用了

c1.speakName1()// speakName1

 

c1.speakName2()// speakName2

 

c1.speakName3()// speakName3

 

c1.speakName4()// speakName4

 

// instanceof isPrototypeOf 无法判断实例和类型的关系

console.log(Father.prototype.isPrototypeOf(c1))// false

console.log(c1 instanceof Father)// false

以上就是js使用构造函数的缺点,希望对大家有所帮助。更多js学习指路:js教程

推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。

以上是 js使用构造函数的缺点 的全部内容, 来源链接: utcz.com/z/546265.html

回到顶部