栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Node.js用Javascript进行OOP编程

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Node.js用Javascript进行OOP编程

两个月后

也许您确实需要一个库,ES5就像地狱一样冗长,所以我创建了pd

原始答案

我正在寻找Node.js的OOP解决方案/库。

并不 需要一个库。您有 ES5

Javascript没有经典的OOP。它具有原型OOP。

这意味着您只有对象。您只能对对象进行扩展,操作和克隆。

操作

var o = {};o.foo = "bar";

延伸

var o = someObject;Object.defineProperties(o, {  "foo": { value: "foo" },  "bar": { value: "bar" }  "method": { value: function () { } }}

克隆

var o = someObject;var p = Object.create(o);

克隆并扩展

var o = someObject;var p = Object.create(o, {  "foo": { value: "foo" },  "bar": { value: "bar" }  "method": { value: function () { } }}

要了解这一点很重要

Object.create
Object.defineProperty
Object.defineProperties
工作。

克隆操作实际上不是克隆。它正在根据蓝图创建一个新对象。蓝图是一个对象。它将蓝图放入了

[[Prototype]]
。我将用于演示
[[Prototype]]
.__proto__
财产中的生活。

var o = {};var p = Object.create(o);p.__proto__ === o; // truevar q =  Object.create(p);q.__proto__.__proto__ === o;var r = Object.create(q);r.__proto__.__proto__.__proto__ === o;

免责声明:

.__proto__
已弃用。不要在代码中使用它。它具有用于调试和健全性检查的功能。

这里主要的一点是,从访问属性

o
r
它必须走3级了原型链,这变得昂贵。为了解决该问题,而不是克隆随机对象,您应该克隆特定的蓝图(每个对象应该有一个蓝图)。

// Parent blueprintvar Parent = (function _Parent() {  // create blank object  var self = Object.create({});  // object logic  return self;}());// factory functionvar createParent = function _createParent(foo) {  // create a object with a Parent prototype  return Object.create(Parent, {    foo: { value: foo }  });}var Child = (function _Child() {  var self = Object.create(Parent);  // other stuff  return self;}());var createChild = function _createChild(bar) {  return Object.create(Child, {    bar: { value: bar }  })};

这是我正在处理的一些代码的片段,您可以将其用作示例:

var Sketchpad = (function _SketchPad() {    var self = Object.create({});    var mousemove = function _mousemove(e) {        this.drawLine(e);    };    self._init = function _init() {        this.$elem.bind({ "mousemove": mousemove.bind(this),        });        this.pens = {};        $("#clear").bind("click", this.clear.bind(this));        $("#undo").bind("click", (function _undoPath() { this.pen.undo();        }).bind(this));        return this;    };    self.clear = function() {        this.paper.clear();        };    return self;    }());createSketch = function _createSketchPad(id, w, h) {    var paper = Raphael(id, w, h);    var pen = createPen(paper);    var o = Object.create(Sketchpad, {        paper: { value: paper },        $elem: { value: $("#" + id) },        pen: {  get: function() { return pen; }, set: function(v) { pen = v; }        }    });    return o._init();};


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号