首页 > 其他分享 >前端歌谣-第七课-关于原型

前端歌谣-第七课-关于原型

时间:2023-09-12 15:33:11浏览次数:31  
标签:function const 歌谣 第七课 state 原型 console prototype log

前言

我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是原型的讲解

环境配置

npm init -y
yarn add vite -D

修改page.json配置端口

{
  "name": "demo1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "vite --port 3002"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "vite": "^4.4.9"
  }
}

声明方式

const obj={}

function Obj1(){}

const obj1=new Obj1()

const obj2=Object.create(null)

const obj3=new Object()

console.log(obj,obj1,obj2,obj3)

运行结果

前端歌谣-第七课-关于原型_Test

原型案例

function Test(){
    this.a=1;
    this.b=2;
}
Test.prototype.c=3
Test.prototype.d=4

Object.prototype.e=5
Object.prototype.f=6

const test=new Test()
console.log(test)

运行结果

前端歌谣-第七课-关于原型_Test_02

原型案例

function test(){}
console.dir(test.__proto__===Function.prototype)
console.log(Function.__proto__===Function.prototype)

function Test1(){
    this.a=1
}

Test1.prototype.b=2

const test1=new Test1()
//test.__proto__

const testPrototype=Object.getPrototypeOf(test1)
console.log(testPrototype===test1.__proto__)

const obj={
    a:1
}
Object.setPrototypeOf(obj,{
    b:1
})
console.log(obj)

运行结果

前端歌谣-第七课-关于原型_ci_03

对象参数属性

const obj=Object.create({
    a:1,
    b:2
},{
    a:{
        value:3,
        writable:false,
        configurable:true,
        enumerable:true
    }
})
console.log(obj)

监听状态改变

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>

    </h1>
    <h2></h2>
    <p></p>
    <span></span>
    <script type="module" src="./index5.js"></script>
</body>
</html>

index5.js

import { useReacttive, useWatcher } from "./Delfin.js"

const state = useReacttive({
    title: `This is title`,
    content: `This is content`
})

function render() {
    document.querySelector("h1").innerText = state.title
    document.querySelector("h2").innerText = state.title

    document.querySelector("p").innerText = state.content
    document.querySelector("span").innerText = state.content
}
render()


useWatcher([
    document.querySelector('h1'), document.querySelector('h2')
],'title',(prev,cur)=>{
    console.log(prev,cur)
})

useWatcher([
    document.querySelector('p'), document.querySelector('span')
],'content',(prev,cur)=>{
    console.log(prev,cur)
})

setTimeout(()=>{
    state.title="这是标题",
    state.content="这是内容"
},1000)

delfin.js

import WatcherMap from "./WacthMap"
import Watcher from './Watcher'

const watcherMap=new WatcherMap()
export function useReacttive(state){
   return new Proxy(state,{
    get(target,key){
        return Reflect.get(target,key)
    },
    set(target,key,value){
        watcherMap[key].update(target[key],value)
        return Reflect.set(target,key,value)
    }
   })
}

export function useWatcher(collection,dep,callback){
   const watcher=new Watcher()
   watcher.set(collection,callback)
   watcherMap.set(dep,watcher)
}

WatchMap.js

export default function WactherMap(){

}

WactherMap.prototype.set=function(dep,watcher){
    this[dep]=watcher;
}

Wacther.js

export default function Watcher(){
   this.collection=[];
   this.cb=null
}

Watcher.prototype.set=function(collection,callback){
   this.collection=collection
   this.cb=callback
}

Watcher.prototype.update=function(prevValue,currentValue){
  this.collection.forEach(el=>{
    el.innerText=currentValue
  })
  this.cb[prevValue,currentValue]
}

运行结果

前端歌谣-第七课-关于原型_Test_04

前端歌谣-第七课-关于原型_ci_05

标签:function,const,歌谣,第七课,state,原型,console,prototype,log
From: https://blog.51cto.com/u_14476028/7445878

相关文章

  • 前端歌谣-第八课-关于面向对象
    前言我是歌谣最好的种树是十年前其次是现在今天继续给大家带来的是面向对象的讲解环境配置npminit-yyarnaddvite-D修改page.json配置端口{"name":"demo1","version":"1.0.0","description":"","main":"index.js",......
  • 前端歌谣-第六课-关于this指向
    前言我是歌谣最好的种树是十年前其次是现在今天继续给大家带来的是this的讲解环境配置npminit-yyarnaddvite-D修改page.json配置端口{"name":"demo1","version":"1.0.0","description":"","main":"index.js",......
  • 4. 前端设计模式之原型模式
    PrototypePattern原型模式:在多个对象间共享相同的属性  JavaScript原生支持原型链也是实现继承的基础,如以下代码虽然是使用的ES2016新的语法classc创建的类Dog,然后又使用new实例化对象dog1、dog2、dog3,底层依然操作的原型链:classDog{constructor(name){this.name......
  • 前端歌谣-第六课-关于this指向
    前言我是歌谣最好的种树是十年前其次是现在今天继续给大家带来的是this的讲解环境配置npminit-yyarnaddvite-D修改page.json配置端口{"name":"demo1","version":"1.0.0","description":"","main":"index.js",......
  • 原型模式和深拷贝,浅拷贝
    原型模式案例引入克隆羊问题有一只羊,姓名为tom,年龄为1,颜色为白色,编写程序创建和tom羊属性完全相同的羊。传统方式解决代码实现publicclassSheep{privateStringname;privateintage;privateStringcolor;publicSheep(){}publicShe......
  • 设计模式—原型模式(Prototype)
    目录一、什么是原型模式?二、原型模式具有什么优缺点吗?三、有什么缺点?四、什么时候用原型模式?五、代码展示①、简历代码初步实现②、原型模式③、简历的原型实现④、深复制⑤、浅复制一、什么是原型模式?用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实......
  • 前端歌谣的刷题之路-第十三题-画一个圆
     目录前言题目 核心代码总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网......
  • 前端歌谣的刷题之路-第十四题-设置盒子的一个宽和高
     目录前言题目核心代码总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网......
  • 创建型设计模式-原型 Prototype
    简介原型模式支持按照一个对象为模板,创建出另一个一模一样的对象。简单说就是把A对象的属性,都赋值到B上,注意必须是深拷贝,即clone后的AB关联的对象是不同的对象。角色抽象原型类定义clone方法具体实现类实现clone方法类图代码classPrototype{p......
  • 前端歌谣的刷题之路-第十一题-伪类选择器
     目录前言题目 核心代码总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网......