JS原型设计模式(四)之缺陷(一)
来源:互联网 发布:人头气球 知乎 编辑:程序博客网 时间:2024/06/03 19:28
前面三篇介绍的都是原型设计模式的好处,今天说说原型模式的弊端:1.构造函数指向需要手工写入2.对于引用类型来说有共享问题的错误
var Person = function () { this.class='ddd'; this.toString=function(){};};Person.prototype.name = 'tlc';Person.prototype.age = '25';Person.prototype.sex = 'boy';Person.prototype.sayInfo = function () { console.info(this.name + "--" + this.age + "--" + this.sex)};每次为原型对象添加属性或者方法的时候都要重新写一遍Person.prototype这个字段,这样的写法太过复杂,所以可以将Person.prototype给指向一个对象,而这个对象中包含所需要的属性和方法
var Person = function () {};Person.prototype = { name: 'tlc', age: '19', sex: 'boy', sayInfo: function () { console.info(this.name + "--" + this.age + "--" + this.sex) }};所以出现了原型对象的constructor指向不是Person的问题,因为上述代码相当于重写原型对象,而在js中每此创建创建函数的时候都会创建一个原型对象,所以上述代码之后的constructor指向新创建的对象constructor
var person1 = new Person();console.log(person1.constructor == Person);//falseconsole.info(person1.constructor == Object);//true可以手动添加constructor属性,但是这个属性是可以枚举的,如果不想这个属性可以枚举,可以使用defineProperty方法之后就不能枚举此属性
Person.prototype = { constructor:Person, name: 'tlc', age: '19', sex: 'boy', sayInfo: function () { console.info(this.name + "--" + this.age + "--" + this.sex) }};var person1 = new Person();console.log(person1.constructor == Person);//trueconsole.info(person1.constructor == Object);//false
Object.defineProperty(Person.prototype,'constructor',{ enumerable:false, value:Person});
0 0
- JS原型设计模式(四)之缺陷(一)
- JS原型设计模式(四)之缺陷二
- JS原型设计模式(一)
- 设计模式(四)之Prototype - 原型模式
- C++设计模式之四:Prototype(原型模式)
- C#设计模式(四)原型模式
- java设计模式(四)---原型模式
- C++ 设计模式(四)----原型模式
- C++设计模式之原型模式(一)
- 设计模式系列之四:原型模式
- 四、设计模式之三-----原型模式
- JAVA设计模式之四:原型模式
- JS原型设计模式(二)
- JS原型设计模式(三)
- 设计模式(四)-原型模式(Prototype模式)
- 设计模式之原型模式(Prototype)
- 设计模式之原型模式(Prototype)
- 设计模式之原型模式(clone)
- java多线程中的wait()和notify()
- Apache Benchmark安装、参数含义&使用总结、结果分析
- Android中Action、Category、Data匹配规则
- ruby on rails 减少查询次数
- Intellig idea jdk明明是1.8了,还是 出现Diamond types are not supported at this language level
- JS原型设计模式(四)之缺陷(一)
- 移动端REM响应式模板及相应规范
- CSS样式中的 nav ul li ul 与 nav>ul>li
- 关于hadoop组件的端口的用处
- Android 炫酷的loading
- KMP问题详解
- java校验正则表达式
- Oracle 建立索引及利用索引的SQL语句优化
- Yii2 事务处理