JavaScript 写 原生组件

JavaScript 原生组件



一、什么是组件

1.继承Html组件

继承Html组件(div,Image ~~) -> 相当于修改html组件
<img src="#" is="my-img" alt="">

class MyImg extends HTMLImageElement {
   	
        constructor() {
   
            super();
            console.log(this);// this指向-> <img src="#" is="my-img" alt="">
            setTimeout(() => {
   
                this.src = './image/859.jpg'
            }, 1000);
        }
    }
    customElements.define('my-img', MyImg, {
   
        extends: 'img'
    });
  	
- - customElements.define()
	- 用于注册新的自定义元素并获取有关先前已注册的自定义元素的信息

2.自定义组件

<body>
<my-com></my-com>
</body>

let template = document.createElement('template');
    template.innerHTML = `
        <div>
            我是洪帮反贼,我要杀光所有清狗
        </div>
        <style>
            div {
   
                background-color: skyblue;
            }
        </style>
    `;
    class MyCom extends HTMLElement {
   
        constructor() {
   
            super();
            console.log(this); //this -> my-com
            //影子DOM  attachShadow
            let _sd = this.attachShadow({
    mode: 'open' }); 
            //Element.attachShadow()方法将影子DOM树附加到指定的元素,并返回对其的引用ShadowRoot 
            _sd.appendChild(template.content.cloneNode(true)); 
            //content返回template模板中所有内容
        }
    }
    customElements.define('my-com', MyCom);
- - 自定义组件  继承 HTMLElement 
- - Element.attachShadow(mode: 'open')方法
		- 将影子DOM树附加到指定的元素,并返回对其的引用ShadowRoot 
		- mode: 'open' :
		- mode: 'close' :
- - .content
		- content返回template模板中所有内容

3.get 和 set

//get
let height = "178cm";
class Person{
   
    constructor(){
   
        // this.height = "178cm";
    }
    get height(){
   
        console.log("get");
        return height;
    }
}
let zhangsan  = new Person();
console.log(zhangsan.height)//178cm
//set
class Person{
   
    constructor(){
   
        // this.height = "178cm";
    }
   set height(newValue){
   
        console.log(newValue);
        height = newValue; //180cm
    }
}
let zhangsan  = new Person();
zhangsan.height = "180cm";

4.合并配置(合并多个对象)

  1. Object.assign(obj1, obj2)
{
   
   	let obj1 = {
    'a': 1 };
    let obj2 = {
    'b': 2, 'c': 3 <
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值