JavaScript对象及作用域bind

  这里分两个版本将,ES5和ES6

一.ES5


1.JSON对象

var jsObject1 = JSON 这样定义的jsObject1已经是实例对象了,JSON对象创建的对象自动加了this引用:
var jsObject1 = {
    objectName : 'jsObject1',
    objectClass : 'JSON',
    testProp1 : 'testProp1',
    objectf1 : function(){
    	console.log(this.objectName);
    },	
    objectf2 : function(){
    	return this.objectClass;
    },
    objectf3 : function(){
    	this.objectf1();
    }
}
这里的实例对象jsObject1中有三个属性和三个属性方法,这里的所有属性都已经自动加了this,所有对象内引用的时候要加this。
jsObject1.objectf1();   //'jsObject1'
console.log(jsObject1.objectf2());  //'JSON'
jsObject1.objectf3();   //'jsObject1'

function testf1(){                     //这里testf1赋值给jsObject1的属性,形成属性方法
    console.log(this.testProp1);
}

jsObject1.objectf4 = testf1;
jsObject1.objectf4();  //‘testProp1’
我们尝试着输出对象的属性和调用对象的方法,并在后面向对象添加属性方法testf1()。this这个东西,大体说就是,this有关的东西在哪里运行,就指向谁。

2.函数对象

/*****构造函数******
* 1.构造函数,用new关键字生成实例对象
* 2.用this引用声明的变量,实例对象可以访问
* 3.
*/
function jsObject2(name){  
	var object2Name = name;    //局部变量,内部函数可以访问
	this.object2Class = 'han shu';   //局部变量,但是通过实例对象可以访问
    function of1(){
    	console.log(object2Name);
    }

    this.of2 = function(){ 
        of1();    
    }
}

var js2 = new jsObject2('hello');   //实例化对象
js2.of2();       //'hello'
console.log(js2.object2Class);   //'han shu'
先定义函数,然后用new的方法,生成实例对象。

3.JSON对象作用域绑定

/*****JSON对象作用域设置bind******
* 1.在方法赋值等改变了方法作用的时候,需要bind绑定,这样方法内引用的属性才能正确赋值
* 2.
* 3.
*/

var jsObject3 = {
	objectName : 'jsObject3',
	onlyo3 : 'hello world o3',
        o3f1 : function(){
    	return this.onlyo3;
    }
}

var jsObject4 = {
	objectName : 'jsObject4',
	onlyo4 : 'hello world o4',
	o4f1 : function(){},
	o4f2 : function(){
		return this.o4f1();
	}
}

var z = jsObject3.o3f1.bind(jsObject3);   //绑定作用域

jsObject4.o4f1 = z;  

console.log(jsObject4.o4f2());  //'hello world 03'
我们这里将 jsObject3 的属性方法 o3f1 赋值给了 jsObject4 的 o4f1,运行作用域发生了变化,我们要在赋值前,对这个函数进行作用域绑定,用的是 bind()方法。

4.函数对象作用域绑定

/*****函数对象作用域设置bind******
* 1.在方法赋值等改变了方法作用的时候,需要bind绑定,这样方法内引用的属性才能正确赋值
* 2.
* 3.
*/

function jsObject5(){
	this.o5 = 'object 5';
	this.o5f1 = function(){
        return this.o5;
	}.bind(this);     //绑定作用域
}

function jsOjbect6(){
	this.o6f1 = function(){};
    this.o6f2 = function(){
          return this.o6f1()
    };
}

var testO5 = new jsObject5();
var testO6 = new jsOjbect6();

testO6.o6f1 = testO5.o5f1;
console.log(testO6.o6f2());  //'object 5'

二.ES6

1.创建对象

class object {
  constructor(name,version){  //构造函数,初始化用
    this.name = name;
    this.version = version;
    this.test = 'hello world';
  } 
  of1(){
     console.log(this.version);
  }
  of2(){
     this.of1();
  }
}

let obj = new object('chad','ES6');
console.log(obj.name);  //'chad'
obj.of1();   //'ES6'
obj.of2();   //'ES6'
由于ES6的语法糖,让我们用class关键字创建对象,初始化方式什么的与OC,C++有那么一丝神似了。

2.作用域绑定

class ojbect1 {
   constructor(x,y){
    this.x = x;
    this.y = y;
    this.o1f1 = this.o1f1.bind(this);
   } 
   o1f1(){
    return this.x;
   }
}

class object2 {
    constructor(){
    }
    o2f1(){
    }
    o2f2(){
       return this.o2f1();
    }
}

let testObject1 = new ojbect1('hello','world');
let testObject2 = new object2();

testObject2.o2f1 = testObject1.o1f1;
console.log(testObject2.o2f2());  //'hello'





  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue3中,作用域插槽是一种通过插槽将父组件的数据传递给子组件的机制。与Vue2中的具名插槽不同,Vue3中的作用域插槽使用了新的语法来实现。 在Vue3中,你可以使用`<slot>`元素的`v-bind`指令来向插槽中传递数据。你可以在父组件中使用`v-bind`指令来绑定插槽中的数据,然后在子组件中通过`props`接收该数据。这样就能在子组件中使用父组件的数据了。 例如,假设我们有一个父组件`ParentComponent`和一个子组件`ChildComponent`,我们想要将父组件中的数据传递给子组件。我们可以在父组件的模板中使用作用域插槽来实现: ```html <ParentComponent> <template #default="data"> <ChildComponent :propName="data.property"></ChildComponent> </template> </ParentComponent> ``` 在上面的例子中,我们使用了`<template>`元素来定义作用域插槽,并且给插槽取了一个名字`default`。在子组件`ChildComponent`中,我们通过`props`接收了父组件传递过来的数据`propName`。 这样,子组件就可以访问到父组件的数据作用域中的`property`属性了。这是Vue3中作用域插槽的一种用法。 需要注意的是,作用域插槽只能从父组件向子组件传递数据,而无法访问子组件的数据。这是由于Vue模板中的表达式只能访问其定义时所处的作用域,与JavaScript的词法作用域规则一致。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vue3 插槽详解](https://blog.csdn.net/qq_35191010/article/details/130153500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值