js的面向对象开发能力较弱,基本是以prototype为核心的面向对象,虽然现在出了个class这玩意,但本文还是先不做探讨。

面向对象基础——构造函数方法

var Fly = function (speed) {
this.power = "i can fly";
this.speed = speed+"km/h";
this.init = function(){
console.log(" i will fly and my speed is "+this.speed);
}
}
var plane = new Fly(1000)
plane.init()

至此我们便构建出了一个简单的对象plane是一个 new Fly();

那么我们想要拓展怎么办

面向对象实现的基础——prototype

Fly.prototype.sayPower = function(){
console.log(this.power)
}

由此我们便给他添加了一个新的方法叫做sayPower();同样可以在plane中调用。

一个一个的添加非常麻烦,要添加好多那么应该怎么办

Fly.prototype = {
type:"波音747",
saySpeed:function(){
console.log(this.speed)
},
sayType:function(){
console.log(this.type)
}
}

我们调用了一个对象指向了他的prototype,但是这是我们执行plane.sayPower()会发现这个方法是没有的,因为他被后来的覆盖了

constuctor指向

上面那种方法还有一个问题就是指向变了,指向就是plane的构造者,plane.constructor变成了Object();

所以我们应该加一行

Fly.prototype = {
constructor:Fly,
type:"波音747",
saySpeed:function(){
console.log(this.speed)
},
sayType:function(){
console.log(this.type)
}
}

JQuery中的链式实现方法

神奇的jQuery实现了链式调用的原理就是在不要求返回特定值时一直返回本身

(function (){
var jQuery = function(selector){
return new Obj(selector)
}//创建一个对象
var Obj = function (selector){
this.init(selector)
}//创建时这个对象初始化一个方法
Obj.prototype = {
length:,
constructor:jQuery,
init:function(selector){
var elem;
elem = document.querySelectorAll(selector);
for(var i=;i<elem.length;i++){
this[i] = elem[i];
}
this.length = elem.length;
return this  //初始化的时候会返回一个本身,然后创建一个hash数组
},
css:function(attr,value){
for(var i=;i<this.length;i++){
this[i].style[attr] = value;
}
return this  //遍历自己的hash,给添加样式
}
}
window.$ = window.jQuery = jQuery
})();
$(".box").css("background","#f93")

还有一种神奇的方法

(function (){
var jQuery = function(selector){
return new jQuery.prototype.init(selector)
}
jQuery.prototype = {
length:,
constructor:jQuery,
init:function(selector){
var elem;
elem = document.querySelectorAll(selector);
for(var i=;i<elem.length;i++){
this[i] = elem[i];
}
this.length = elem.length;
return this
},
css:function(attr,value){
for(var i=;i<this.length;i++){
this[i].style[attr] = value;
}
return this
}
}
jQuery.prototype.init.prototype = jQuery.prototype //在这里都连起来
window.$ = window.jQuery = jQuery
})();
$(".box").css("background","#f93")

js面向对象开发基础的更多相关文章

  1. 新手如何理解JS面向对象开发?

    今天有时间讲讲我对面向对象的理解跟看法,尽量用通俗的语言来表达,多多指教! 如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗? 其实,也 ...

  2. 原生js日历选择器,学习js面向对象开发日历插件

    在web开发过程中经常会碰到需要选择日期的功能,一般的操作都是在文本框点击,然后弹出日历选择框,直接选择日期就可以在文本框显示选择的日期.开发好之后给用户使用是很方便,但如果每一个日历选择器都要临时开 ...

  3. 云笔记项目-补充JS面向对象编程基础知识

    简单介绍: 此部分知识为在做云笔记项目中补充,因为云笔记项目中涉及到前端js,里面写了很多js脚本,用到了创建js属性和方法,在js中直接声明的属性和方法最终都会变成window的对象,即其成为了全局 ...

  4. JS OOP -01 面向对象的基础

    JS面向对象的基础: 1.用定义函数的方式定义类 2.用new操作符获得一个类的实例 3.使用 [ ] 引用对象的属性和方法 4.动态添加,修改,删除对象的属性和方法 5.使用 { } 语法创建无类型 ...

  5. JS面向对象使用面向对象进行开发

      面向对象基础一之初体验使用面向对象进行开发 对 JS 中的面向对象的基础进行讲述, 初体验使用面向对象进行开发 主要内容是 面向对象的概念及特性 用面向对象的方式解决简单的标签创建实例 一些基础的 ...

  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字

    缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...

  7. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  8. JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)

    函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) {             return i1 + i2;//如果不写return返回 ...

  9. JavaScript 面向对象开发知识基础总结

    JavaScript 面向对象开发知识基础总结 最近看了两本书,书中有些内容对自己还是很新的,有些内容是之前自己理解不够深的,所以拿出来总结一下,这两本书的名字如下: JavaScript 面向对象精 ...

随机推荐

  1. PAT甲级——A1086 Tree Traversals Again

    An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example ...

  2. PAT甲级——【牛客练习A1004】

    题目描述 An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For ex ...

  3. 01_Spring入门程序

    一.什么是Spring? 1.Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 2.spring是一个高度灵活的轻量级框架,其目的是降低企业级应用开发的复杂度. ...

  4. neo4j的搭建和实例使用

    一. 简介 neo4j是当今最流行的图数据库,基于 节点+关系 的架构,保存了图形数据的基本元素.同时,数据库也支持通过基础数据元素和独特的CQL查询语法,快速方便的检索.构建复杂的图表关系结果. 二 ...

  5. springboot 2 集成 redis 缓存 序列化

    springboot 缓存 为了实现是在数据中查询数据还是在缓存中查询数据,在application.yml 中将mybatis 对应的mapper 包日志设置为debug . spring: dat ...

  6. kafka offset manage

    kafka low api:fetch数据从topic partition offset buffsize长度. 提交一般两个维度:时间维度,满多少条提交(0.8X之前是没这参数) 在0.8.2.2版 ...

  7. day19 作业

    今日作业 1.什么是对象?什么是类? 对象:特征和技能的结合体 类:一系列对象 相同的特征和技能的结合体 2.绑定方法的有什么特点 对象调用类内部的函数 称之为绑定方法,特点: 不同的对象调用该绑定方 ...

  8. spring基于接口的代理报错

    报错: 1.在service层加上@Transactional注解.浏览器端报错(如下),eclipse控制台无信息 2.去掉@Transactional注解,无报错,但是数据库没有信息插入. 解决方 ...

  9. codec engine工程中使用ccs下编译的lib库

    原文地址:codec engine工程中使用ccs下编译的lib库--转作者:木子小白 这两天将dsp的算法程序放到ccs下,生成lib库文件 这样的好处就是: 1. 算法封装成lib库以后,看不到源 ...

  10. [转载] DDK中VPORT Mini-Driver的使用说明

    学习下. 原文地址:DDK中VPORT Mini-Driver的使用说明作者:跳皮筋的小老鼠 要使用TI DDK中实现的VPORT驱动程序,首先需要在程序中提供VPORT_PortParams类型的参 ...