面向对象编程(OOP )
文章平均质量分 92
Jedi Hongbin
hongbin.xyz meta.hongbin.xyz kmyc.hongbin.xyz
展开
-
面向对象写Tab栏切换
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { padding: 0; margin: 0; } .container...原创 2020-03-16 10:15:32 · 315 阅读 · 0 评论 -
ES6的面向对象写法
这是之前的写法function Previous (name,age){ this.name = name; this.age = age; } let Bin = new Previous('Bin',21);这是es6的写法class Person { constructor(name,age){ this.name = name; ...原创 2020-03-15 09:26:18 · 395 阅读 · 0 评论 -
自我改良版寄生组合式继承
两种不同的寄生组合式实现继承的inheritPrototype函数,第一种的结果对应第一张图function inheritPrototype(subType,superType) { var prototype = Object(superType.prototype);//创建对象 prototype.constructor = subType; ...原创 2020-02-13 14:33:14 · 209 阅读 · 0 评论 -
寄生组合继承
* 因为组合式继承会两次调用超类型的构造函数,* 一次是在创建子类型原型的时候,将超类型的属性添加到自类型的原型上,* 另一次是在子类型构造函数内部调用,将原型上的属性创建到自己身上,* 实现屏蔽超类型同名的属性寄生组合式继承* 通过借用构造函数继承属性,通过原型链的混成形式继承方法.* 基本思路:不必为了指定子类型的原型而调用草类型的构造函数,我们所需要的无非就是给超类型原型的一个...原创 2020-02-12 20:33:25 · 312 阅读 · 0 评论 -
组合式继承
组合继承(combination inheritance)* 有时也叫"伪经典继承",指的是将原型链实现继承和借用构造函数技术和二为一.* 思路:使用原型链实现对原型属性和方法的继承,而通过街工构造函数实现实例属性的继承.* 既通过原型上定义的方法实现了函数复用,又能保证每个实例都有自己的属性. function SuperType(name) { thi...原创 2020-02-12 17:12:11 · 1167 阅读 · 0 评论 -
借用构造函数继承
借用构造函数(伪造对象/经典继承)*基本思想:在子类型构造函数的内部调用超类型构造函数。*通过使用apply()和call()方法也可以在(将来)新创建的对象上执行构造函数。* 相当于在子类型的内部执行了跟超类型身上所有的操作,比如添加属性,方法,实现继承超类型的方法和属性* 不同于原型链继承的是,子类型不再是超类型的实例,就和名字一样,其余的操作跟创建了一个构造函数一样。 fun...原创 2020-02-12 17:10:37 · 362 阅读 · 0 评论 -
寄生式(parasitic)继承
寄生式(parasitic)继承是与原型式继承紧密相关的一种思路.* 思路与寄生构造函数个工厂模式类似,即创建一个仅用于封装继承过程的函数,* 该函数在内部以某种方式来增强对象,* 最后再像真的是它做了所有工作一样返回对象. function createAnother(original) { var clone = Object(original);//通过调用函数...原创 2020-02-12 17:08:23 · 744 阅读 · 0 评论 -
“超类型的构造函数”是指什么?
js原型链实现继承中的一个问题:在创建子类时,不能向超类型的构造函数中传递参数。这个“超类型的构造函数”是指什么?有没有知道的大牛指点下^ o ^...原创 2020-03-14 20:36:01 · 1587 阅读 · 1 评论 -
原型链实现继承
继承*继承是OO(Object Oriented)语言(面向对象语言)最为人津津乐道的概念。* 许多语言都有两种继承方式:接口继承和实现继承。* 接口继承之继承方法签名,实现继承则继承实际的方法。* 因为函数没有签名,在ECMAScript中无法实现接口继承。* ECMAScript5只支持实现继承,而且实现继承只要以来原型链来实现的。/*原型链* ECMAScript 中描述了原型...原创 2020-02-11 12:19:22 · 1209 阅读 · 0 评论 -
寄生构造函数模式
/*感觉没多大用记下得了*/ /* * 基本思维: * 创建一个函数,该函数的作用仅是封装创建对象的代码,然后返回新创建的对象。 * 表面上看很像构造函数 * */ function Person(name,age,job) { var o = new Object(); o.name = name; ...原创 2020-02-10 19:33:47 · 367 阅读 · 0 评论 -
稳妥构造函数模式
/*稳妥对象(durableobjects) * 所谓稳妥对象,指的是没有公共属性,而且其方法也不引用this对象。 * 稳妥模式最适合在一些安全环境中(这些环境会禁止使用this和new), * 或者防止数据被其他应用程序(如 Mashup程序)改动是使用。 * 有两点与寄生构造函数模式不同: * 1,新创建的实例对象不引用this; * 2,不使...原创 2020-02-10 19:32:45 · 434 阅读 · 0 评论 -
原型模式的不足和解决办法
原型模式的缺点:* 虽然省略了为构造函数传递初始化参数这一环节,结果所有的实例都有了默认的相同的属性值。会带来一些不方便,但主要问题还是由其共享的本质所导致的。* 原型中所有的属性是被很多实例共享的,这对于函数非常舒服,但对于包含引用类型的属性来说,问题就出来了:function Person() { } Person.prototype = { name:...原创 2020-02-10 18:24:47 · 976 阅读 · 0 评论 -
更简单的原型语法和原型语法的动态性
更简单的原型语法 为减少不必要的输出,也从视觉上更好的封装原型的功能,用一个包含所有属性和方法的对象字面量来重写整个原型对象: function Person() { } Person.prototype = { name : "Hongbin", age : 21, sex : true, sayHello : funct...原创 2020-02-10 17:03:35 · 287 阅读 · 0 评论 -
工厂模式,构造函数模式和原型模式
红宝书P144,152<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><script> //-----------...原创 2020-02-10 15:15:52 · 343 阅读 · 0 评论 -
for-in循环和替代的两种方法
<script> function Person() { } Person.prototype.name = "宏斌"; Person.prototype.age = 21; Person.prototype.job = "students"; Person.prototype.sayHello = function () { ...原创 2020-02-10 15:12:01 · 1652 阅读 · 0 评论 -
读取属性的特性
Object.getOwnPropertyDescriptor()方法,* 两个参数:属性所在的对象和要读取器描述符的属性名,* 返回值是一个对象,* 如果是数据属性有:configurable,enumerable,writable,value.* 如果是访问器属性有:configurable,enumerable,get,set.<script> var pers...原创 2020-02-09 18:04:38 · 577 阅读 · 0 评论 -
对象的访问器属性
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body>红宝书p141,142<script> /* * 访问器属性...原创 2020-02-09 16:52:31 · 344 阅读 · 0 评论 -
JavaScript对象属性的特性高级功能
“use strict”/创建一个对象最简单的方式:创建一个Object的实例,然后再为它添加属性和方法/var person = new Object();person.name = “Hongbin”;person.age = 21;person.job = “students”;person.say = function () {console.log("Hi! I am "+...原创 2020-02-09 14:20:25 · 415 阅读 · 0 评论 -
prototype原型和__proto__原型链
原创 2020-02-08 15:08:17 · 279 阅读 · 0 评论 -
constructor构造函数的小细节
定义的f是Fn的一个实例,打印Fn发现里面只有m:10,因为构造函数中定义的n跟f没关系,只有this.xxx跟new的新对象有关系,所以打印f.n会返回undefined,因为n没有定义,打印f.m会打印10,也就是Fn中的n在构造函数中return一个基本类型值,打印f,结果不会有影响;在构造函数中return一个对象(引用值),打印f,f变成了return的对象,因为,构造函数执行结束...原创 2020-02-08 13:06:21 · 602 阅读 · 0 评论 -
基本类型值基于两种不同模式创建的值是不同的
num2 是数字类(Number)的实例,mun1也是,只是表达方式不同,也都可以使用数字类的属性和方法视频地址:https://www.bilibili.com/video/av24239549?p=6.原创 2020-02-08 11:23:06 · 212 阅读 · 0 评论 -
一道考察this指向和js运行原理细节的单例模式测试题
原题:var n = 2;var obj = { n: 30, fn: (function (n) { n *= 2; this.n += 2; var n = 5; return function (m) { this.n *= 2; console.l...原创 2020-02-07 19:41:45 · 336 阅读 · 0 评论 -
Singleton Pattern(单例模式)
/*单例设计模式(Singleton Pattern)* 1,表现形式:* var obj = { XXX:XXX, ... };* 就是一个破对象* 在单例模式中obj不仅是对象名,被称作“命名空间”【NameSpace】。* 把描述的事务放到命名空间中,多个命名空间是独立分开的,互不冲突** 作用:把描述同一件事务的属性和特征进行“分组,归类”(存储在同一个堆...原创 2020-02-07 15:24:01 · 255 阅读 · 0 评论