博主目前在蚂蚁集团-体验技术部,AntV/S2 是博主所在团队的开源项目——多维交叉分析表格,欢迎使用,感谢到 S2 github 仓库点赞 star,有任何关于前端面试、就业、技术问题都可给在文章后留言。
Number、Srting、Date、Boolean、Object、Array、Function、RegExp、Error、TypeError、EvalError
等。Global、Math
。function Person() {
this.name = "gfh";
}
Person.prototype.getName = function() {
console.log("name:", this.name);
}
function Child() {}
// 新实例的原型等于父类的实例
Child.prototype = new Person();
let child1 = new Child();
child1.getName();
function Person() {
this.name = "gfh";
this.hobbies = ["eatting", "sleeping"];
}
Person.prototype.getName = function() {
console.log("name:", this.name);
}
function Child(age) {
// 通过 call() 方法将父类构造函数引入子类构造函数
Person.call(this);
this.age = age;
}
let child1 = new Child(24);
let child2 = new Child(25);
console.log(child1.name); // gfh
console.log(child1.age); // 24
child1.hobbies.push("coding");
console.log(child1.hobbies); // ["eatting", "sleeping", "coding"]
console.log(child2.hobbies); // ["eatting", "sleeping"]
function Person(name) {
this.name = name;
this.hobbies = ["eatting", "sleeping"];
}
Person.prototype.getName = function() {
console.log("name:", this.name);
}
function Child(name,age) {
// 构造函数继承
Person.call(this, name);
this.age = age;
}
// 原型链继承
Child.prototype = new Person();
let child1 = new Child("gfh",24);
let child2 = new Child("zs",25);
console.log(child1.name, "-", child1.age); // gfh-24
console.log(child2.name, "-", child2.age); // zs-25
child1.getName(); // name:gfh
function CreateObj(obj) {
function F() {}
F.prototype = obj;
console.log(obj.__proto__ === Object.prototype); // true
console.log(F.prototype.constructor === Object); // true
return new F();
}
let person = {name: "zs", friends: ["ls", "ww"]};
let p1 = CreateObj(person);
let p2 = CreateObj(person);
p1.name = "ls";
console.log(p2.name); // "zs"
p1.friends.push("zl");
console.log(person); // {name: "zs", friends: ["ls", "ww", "zl"]}
let person = {name: "zs", hobbies: ["eatting", "sleeping"]};
function CreateObj(obj) {
function F() {}
F.prototype = obj;
return new F();
}
let p1 = CreateBoj(person);
let p2 = Object.create(person);
console.log(p1.name); // "zs"
console.log(p2.hobbies); // ["eatting", "sleeping"]
function CreateChild(obj) {
let newobj = CreateObj(obj);
newobj.sayName = function() {
console.log("name:", this.name);
}
return newobj;
}
let c1 = CreateChild(person);
c1.sayName(); // name: "zs"
function Parent(name) {
this.name = name;
this.hobbies = ["eatting", "sleeping"];
}
Parent.prototype.sayName = function() {
console.log(this.name);
}
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
function CreateObj(obj) {
function F() {};
F.prototype = obj;
return new F();
}
function prototype(child, parent) {
let prototype = CreateObj(parent.prototype);
prototype.constructor = child;
child.prototype = prototype;
}
prototype(Child, Parent);
let child1 = new Child("zs", 24);
console.log(child1); // Child {name: "zs", hobbies: ["eatting", "sleeping"], age: 24}
class Parent {
constructor() {
this.hobbies = ["eatting", "sleeping"];
}
addHobbies() {
this.hobbies.push("codding");
}
}
class Child extends Parent {
constructor() {
super();
}
}
let child1 = new Child();
child1.addHobbies();
child1.hobbies; // ["eatting", "sleeping", "codding"]
Vue.component("组件名",{方法});
在 main.js 中引入组件,通过 Vue.component
注册,如下:
Vue.component("my-component", {
template:"", // 或者使用``
data:{},
mathods: {},
// 生命周期函数等
})
在任何其他组件都可以通过
<template>
<my-component></my-component>
</template>
import MyComponent from "./MyComponent.vue";
export default {
components: {
MyComponent // 直接初始化
}
}
使用场景: 在构建页面的过程中,需要把一些经常用到的公共部分抽取出来作为一个单独的组件,但在实际使用这个组件的时候,不能完全满足我们的需求,这时候需要使用插槽来分发内容。
过程: 父组件引用子组件时,希望向子组件传递模板内容,子组件让父组件传递过来的模板内容在所在的位置显示,子组件中的
作用: 可以让用户扩展组件,更好的复用组件和对其定制化处理。
分类:
3. 默认插槽
直接使用
4. 具名插槽
子组件:name: “slotName”,父组件: ,v-slot 可以使用 # 代替。
5. 作用域插槽
主要解决父组件在向子组件插槽传递模板内容时,存在访问子组件数据的问题。
参考这篇文章
vue 2.6.0之后通过 v-slot: slotName 来使用,并且 v-slot 只能添加在 上,和已经废弃的 slot 属性不同。
props: {
name: {
type: String,
requird: true
}
}
<h1 @click="changeTitle">Titleh1>
methods: {
changeTitle() {
this.$emit("titleChanged", "titleValue")
}
}
父组件:
<p @titleChanged="updateTitle">父组件p>
methods:{
updateTitle(e) {
this.title = e;
}
}
let bus = new Vue();
Vue.prototype.bus = bus;
(子)组件A:
<button @click="sendTo">子组件一</button>
data() {
return {
name: "zs"
}
},
methods: {
sendTo() {
this.bus.$emit("sendTo", this.name);
}
}
(子)组件B:
data() {
return {
name: ""
}
},
methods: {
this.bus.$on("sendTo", params => {
this.name = params;
})
}
补充:父子组件方法的相互调用。
<button @click="useChildMethods">父组件</button>
<child ref="child"></child>
methods: {
useChildMethods() {
this.$refs.child.childMethods();
}
}
子组件:
methods: {
childMethods() {
console.log("子组件的方法。");
}
}
<button @click="childMethod"></button>
methods: {
childMethods() {
this.$emit("parent", "childParams");
}
}
父组件:
<child @parent="parentMethods"></child>
methods: {
parentMethods(value) {
console.log("子组件传过来的参数", value);
}
}
还可以使用 this.$parent方法。
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。state、getters、actions、mutations、modules。
二分法是在一个有序数组中查找目标值的方法。
步骤:
对于扑克牌排序,如果是一边摸牌一边排序整理,使用插入排序;如果是全部拿在手中了,使用快速排序。
研究生阶段项目需要。
本科丰富,研究生项目。
业务。
通过鼠标所在的坐标来判断。