面向对象 part5

构造函数模式与原型模式结合

function Person(name) = {
    this.name = name
    this.friends = ["a", "b"]
}

person.prototype = {
    constructor: Person,
    sayName: function() {
    alert("this.name")
}
}

var p1 = new Person("hi")

但是这很让人困惑。因为构造函数和原型模式单独书写。不符合面向对象的封装。

//因为构造函数会初始化原型,所以原型模式不能书写到构造函数中,因为这样每创建一次实例都会重新定义一下原型函数

解决方案 动态原型模式

所有的都封装在构造函数中,通过在构造函数中初始化原型(仅在必要的时候。就是可以添加一个判断)

function Person(name) = {
//属性
    this.name = name
    this.friends = ["a", "b"]
//方法
    if (typeof this.sayName != "function") {
        person.prototype.sayName =function() {
    alert(this.name);
     }
}
}



var p1 = new Person("hi")

这段代码只会在初次调用构造函数的时候才会执行,此后原型已经完成了初始化。这里在原型中做的修改,能够立即体现在所有的实例中。

原型的动态性:我们对原型对象所做的任何修改,都能够立即从实例上反应出来

猜你喜欢

转载自www.cnblogs.com/-constructor/p/11870870.html